2013-09-25 15 views
10

Bir Ember obj aldığımı varsayalım.Ember.js .then işlevi için her zaman bir geri arama var mı?

obj.save().then(function(res){ 
    // Success callback 
}, function(res){ 
    // Fail callback 
}); 

var mı bitmiş bir/her zaman .then() ile ember.js söz zinciri için callback: arka uç ile senkronize her türlü yaparken bir söz zincirini kullanmak için bir olasılıkları var mı?

Üçüncü bir parametre işlevi eklemeyi denedim, ancak yardımcı olmadı.

cevap

10

http://emberjs.com/api/classes/Ember.PromiseProxyMixin.html#method_finally

Kor -> jQuery

  1. .ve() -> .done()
  2. .catch() -> .fail()
  3. .finally() - (router)> .always()

Örnek:

var self = this; 
var modelType = this.store.createRecord('modelType', {/* model attrs */}); 

modelType.save().then(function(model){ 
    self.transitionTo('model.show', model); 
}).catch(function(){ 
    console.log('Failure to Save: ', reason); 
}).finally({ 
    self.hideSpinner() 
}); 
+1

Doğru yanıt olarak işaretlenmelidir. Benim için harika çalışıyor! – Pedro

3

Ne yazık ki yoktur. Ama kendi değiştirerek RSVP.Promise prototip oluşturabilirsiniz:

Ember.RSVP.Promise.prototype.always = function(func) { 
    return this.then(func, func); 
} 

Yani aşağıdakileri yapabilirsiniz:

// will show success 
Ember.RSVP.resolve('success').always(function(msg) { 
    alert(msg) 
}) 

// will show error 
Ember.RSVP.reject('error').always(function(msg) { 
    alert(msg) 
}) 

Ben

2

Kor vaat için RSVP.js kütüphanesini kullanır umut olur, ve Promises/A (+) özelliklerinin bir parçası olmamasından dolayı RSVP does not support always.

Ember.RSVP.Promise.prototype.andThen = function(success, error, always) { 
    return this.then(function(value) { 
    var ret = success(value); 
    always(value); 
    return ret; 
    }, function(reason) { 
    var ret = error(reason); 
    always(reason); 
    return ret; 
    }); 
}; 
+0

Yeterince adil, teşekkürler! – p1100i

+1

Ember bir "nihayet" yöntemine sahiptir: http://emberjs.com/api/classes/Ember.PromiseProxyMixin.html#method_finally – Taysky

0

Gorner çözümü eserler ancak Kor Verileri için siz de aşağıdaki eklemek zorunda: Eğer ihtiyacın varsa

, @wycats following approach anlaşılacağı

Ember.PromiseProxyMixin.reopen({ 
    andThen: function() { 
    var promise = this.get('promise'); 
    return promise['andThen'].apply(promise, arguments); 
    } 
}); 

nedeni olduğunu DS.Model.save() işlevi, Ember.RSVP.Promise uygulanmayan ancak bunun yerine Ember.PromiseProxyMixin uygulayan bir PromiseObject (bkz. http://emberjs.com/api/data/classes/DS.PromiseObject.html) değerini döndürür. Yani, modelleri kaydederken sözlerle çalışmak için andThen işlevini bu karıĢımda kullanılabilir hale getirmelisiniz.

İlgili konular