[英]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.