6

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

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

感谢您提供任何信息!

4

2 回答 2

12

模型

不,您的模型不会初始化任何其他 MVVM 对象。
确保他们只负责定义他们将携带的数据,以及他们将如何持久化这些数据。

var CoolModel = Backbone.Model.extend({
  defaults: function() {
    return {
      coolness: 'extreme',
      color: 'red'
    };
  }
};

var myModel = new CoolModel;

看法

您的视图应包含一个初始化函数,该函数将由 Backbone.View “父级”自动调用:

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() ....
}

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

于 2013-03-29T17:00:54.873 回答
3

虽然这绝对不是一个完整和完整的答案,但我建议您通读Backbone Todos Annotated Docs

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

This is also the way I do it for all my apps, and is what I would recommend. This approach also lets you include more logic around the new model if you need to (such as re-rendering a stats view which keeps track of the number of models in the collection).

于 2013-03-29T17:14:30.087 回答