2013-02-17 16 views
10

Omurga modellerinin bu gibi değişim olayına bağlarım.Backbone model.fetch() öğesi ne zaman tamamlanır?

this.model.on("change", this.render, this); 

Bazen, modelin en son sürümünü getirip görünümü zorlamak istiyorum. Bu yüzden yeni veri daha önce modelinde depolanan ne farklıysa tek değişiklik olayı harekete) bu

this.model.fetch(); 

Maalesef model.fetch (do.

Getirme tamamlandığında, bir değişiklik olayını tetikleyip tetiklemediğini her zaman bir this.render geri çağırma işlemini nasıl tetikleyebilirim? Yardımlarınız için (peşin)

Teşekkür

cevap

11

$.ajax başarı geri bildirimini kullanabilirsiniz, ancak yalnızca modeldeki Backbone sync ve error olaylarını da dinleyebilirsiniz. sync, sunucuya yapılan başarılı bir çağrıdan sonra, sunucuya yapılan başarısız bir çağrıdan sonra error yangınları başlatır.

this.model.on('sync', this.render, this); 
this.model.on('error', this.handleError, this); 
1

isteğe kabul edebilir fetch yöntem başarı ve hata geri aramalar sahiptir; En basit çözüm, görüşün geri dönüşünde render görüntülemektir. Muhtemelen döndürülen jqXHR sözünü de kullanabilirsiniz, ancak eğer AJAX'ın başarılı olacağı (jQuery başına) bir durum varsa, ancak model başlatma başarısız olursa, bu kullanım sorun yaratabilir.

1

Ben senin kod yapısı senin görünümünüz içine modelinizi ileti alıyorsanız sizin modelinizi ileti alıyorsanız ancak, başka bu

var that = this; 
this.model.fetch().done(function() { 
    that.render(); 
}); 

gibi bir şey kullanabilirsiniz ne olduğunu bilmiyorum Sizce dışında, kendi görünümüne sözünü geçirebilir ve initialize

örneğin

var promise = model.fetch(); 
// other code here 
var view = new View({ 
    model: model, 
    promise: promise 
}); 

ve iç görünüm benzer bir şey yapmak Bu çözüm hakkında nasıl

View = Backbone.View.extend({ 
    initialize: function(){ 
     this.options.promise.done(function() { 
      // your code here 
     }); 
    } 
}); 
1

:

// emit fetch:error, fetch:success, fetch:complete, and fetch:start events 
fetch: function(options) { 
    var _this = this; 

    options = options || {}; 

    var error = options.error; 
    var success = options.success; 
    var complete = options.complete; 

    options.error = function(xhr, textStatus, errorThrown) { 
    _this.trigger('fetch:error'); 
    if (error) error(xhr, textStatus, errorThrown); 
    }; 

    options.success = function(resp) { 
    _this.trigger('fetch:success'); 
    if (success) success.call(options.context, resp); 
    }; 

    options.complete = function() { 
    _this.trigger('fetch:complete'); 
    if (complete) complete(); 
    }; 

    _this.trigger('fetch:start'); 

    return Backbone.Model.prototype.fetch.call(this, options); 
} 

Bağlantı Gist için https://gist.github.com/fedyk/23761ce1236c5673fb84

İlgili konular