您是在模型内还是其他地方初始化Backbone视图?
我正在试图找出组织模型/视图的最佳方法。让模型初始化视图是否有意义?
感谢您的任何信息!
答案 0 :(得分:12)
不,您的模型不会初始化任何其他MVVM对象 确保他们只负责定义他们将携带的数据,以及他们将如何坚持下去。
var CoolModel = Backbone.Model.extend({
defaults: function() {
return {
coolness: 'extreme',
color: 'red'
};
}
};
var myModel = new CoolModel;
视图应包含一个初始化函数,该函数将由Backbone.View“parent”自动调用:
var CoolView = Backbone.View.extend({
doSomething: function() { ... },
doSomethingElse: function() { ... },
initialize: function() {
this.listenTo(this.model, 'eventA', this.doSomething);
this.listenTo(this.model, 'eventB', this.doSomethingElse);
}
});
实际创建视图对象时,传入将绑定的模型。这在技术上可以发生在代码中的任何地方(但通常在应用程序级视图中):
renderSomething: function(todo) {
var view = new CoolView({model: myModel});
// view.render() ....
}
也就是说,您的应用程序将模型和视图结合在一起。
答案 1 :(得分:3)
虽然这绝对不是一个完整而完整的答案,但我建议你仔细阅读Backbone Todos Annotated Docs。
您将看到他们所做的是收听集合上的“添加”事件,并在将新模型添加到集合时从主视图创建新模型的视图。您可以在带注释的文档中的AppView初始化函数中看到这一点。
这也是我为所有应用程序执行此操作的方式,也是我推荐的方式。如果需要,此方法还允许您在新模型周围包含更多逻辑(例如重新渲染统计视图以跟踪集合中模型的数量)。