[英]Backbone.js & require.js: how do I transform my models, views and collections to require.js modules?
[英]How do I make sure a function will be called before another in a deeply modularized Backbone, Require.js and D3 app?
正如Reed Spool指出的那樣, fetch
具有成功的回調。 使用方法如下:
var View = Backbone.View.extend({
initialize: function () {
// Preserve *this* in closures
var that = this;
this.collection.fetch({
success: function(data){
console.log(data);
that.render();
},
error: function(){
console.log('error');
}
});
},
render: function() {
//render whatever you need from your fetched collection
}
});
如果我沒聽錯,我認為您需要在提取中使用“成功”回調函數。 參見此處#2 http://chilipepperdesign.com/2013/01/15/backbone-js-bind-callback-to-successful-model-fetch/
如果您擔心的是模塊化代碼中的函數計時解耦,正如您的問題的標題所建議的那樣,我建議您使用Backbone的事件。 請參閱事件聚合器或Pub-Sub設計模式。
使用Backbone解決此問題的常規方法是使用事件。 我是基於MarionetteJS創始人Derek Bailey的各種博客文章撰寫的,因此以后找到相關參考文獻時,我將添加參考文獻...
您的視圖將執行以下操作:
var view = Backbone.View.extend({
...
_actuallyInitialize: function () {
...
}
initialize: function (attr, options) {
...
this.listenTo(this.model, 'data:fetched', this._actuallyInitialize);
...
}
});
而獲取模型的代碼將執行以下操作:
var jqXHR = model.fetch();
jqXHR.done((function (bindModel) {
return function (response, textStatus, jqXHR) {
...
bindModel.trigger('data:fetched');
};
}(model)));
這樣,您可以維護高級模塊化方法,解耦代碼(任何數量的視圖都可以在立即fetch
進行更新),並保持可讀性。 您的Model
自行完成, View
則自行完成。 在我看來,這非常整潔,是我喜歡在Backbone中使用的模式之一。 謝謝你的問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.