您是在模型内还是其他地方初始化Backbone视图?

时间:2013-03-29 16:37:24

标签: javascript backbone.js coffeescript views models

您是在模型内还是其他地方初始化Backbone视图?

我正在试图找出组织模型/视图的最佳方法。让模型初始化视图是否有意义?

感谢您的任何信息!

2 个答案:

答案 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);
  }

});

APPVIEW

实际创建视图对象时,传入将绑定的模型。这在技术上可以发生在代码中的任何地方(但通常在应用程序级视图中):

renderSomething: function(todo) {
  var view = new CoolView({model: myModel});
  // view.render() ....
}

也就是说,您的应用程序将模型和视图结合在一起。

答案 1 :(得分:3)

虽然这绝对不是一个完整而完整的答案,但我建议你仔细阅读Backbone Todos Annotated Docs

您将看到他们所做的是收听集合上的“添加”事件,并在将新模型添加到集合时从主视图创建新模型的视图。您可以在带注释的文档中的AppView初始化函数中看到这一点。

这也是我为所有应用程序执行此操作的方式,也是我推荐的方式。如果需要,此方法还允许您在新模型周围包含更多逻辑(例如重新渲染统计视图以跟踪集合中模型的数量)。