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

Do you initialize your Backbone views from within a model or elsewhere?

本文关键字:视图 初始化 模型 其他      更新时间:2023-09-26

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

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

感谢您的任何信息!

模型

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

var CoolModel = Backbone.Model.extend({
  defaults: function() {
    return {
      coolness: 'extreme',
      color: 'red'
    };
  }
};
var myModel = new CoolModel;
<<h2>视图/h2>

你的视图应该包含一个初始化函数,它将被主干自动调用。查看"父":

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

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

虽然这肯定不是一个完整的答案,但我建议您阅读一下Backbone Todos注释文档。

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

这也是我为我所有的应用程序做的方式,也是我推荐的。如果需要的话,这种方法还允许您在新模型周围包含更多的逻辑(比如重新呈现一个跟踪集合中模型数量的统计视图)。