Backbone.js查看连接的模型

fel*_*lix 36 javascript backbone.js

我是Backbone.js的新手.我只是玩弄它.我想知道该模型是否与View相关.在提供的todos示例中,我在addOne方法中看到,创建了一个新的View,并将其与新创建的模型相关联并附加.

  window.AppView = Backbone.View.extend({
     // view code
     addOne: function(todo) {
          var view = new TodoView({model: todo});
          this.$("#todo-list").append(view.render().el);
     }
  }
Run Code Online (Sandbox Code Playgroud)

当我尝试做类似的事情时,我得到一个错误,说"在undefined上找不到绑定方法".

window.TodoView = Backbone.View.extend({

     initialize: function() {
          _.bindAll(this, 'render', 'close');
          this.model.bind('change', this.render); // I got the error at this place. 
          this.model.view = this;
     }
});
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我必须将新创建的模型作为参数传递给视图构造函数,然后我必须将this.model = task其关联起来.

window.TodoView = Backbone.View.extend({

     initialize: function(task) {
          _.bindAll(this, 'render', 'close');
          this.model = task
          this.model.bind('change', this.render);// now there is no error
          this.model.view = this;
     }
});

window.AppView = Backbone.View.extend({


   insertTask:function(){
        var newTask, newTaskView;
        newTask = new Task(JSON.parse(xhr));
        Tasks.create(newTask);
        newTaskView = new TaskView({ model: newTask });
        $("#todo_list").append(newTaskView.render().el);
        this.input.val('');
}
Run Code Online (Sandbox Code Playgroud)

});

但是todos的例子,没有类似的东西.新模型如何在todos示例中隐式地与新视图相关联?

谢谢

Fac*_*tic 38

它根本不是含蓄的,它在这一行中是明确的:

var view = new TodoView({model: todo});
Run Code Online (Sandbox Code Playgroud)

这是创建一个新TodoView视图并将其model属性设置为addOne函数的唯一参数(todo,它是一个模型).

每当将新模型添加到Todos集合中时,将addOne使用新模型作为参数调用该方法.

Todos.bind('add', this.addOne);
Run Code Online (Sandbox Code Playgroud)

然后,在中addOne,为该模型创建一个新视图,并通过显式设置关系{model: todo}.我怀疑,这是您的代码版本中缺少的内容.

你似乎试图做的是在视图的init函数中链接视图和模型,这很好,但如果你这样做,你就是自己 - 这意味着你需要设置模型< - >查看自己的关系(通过将模型作为参数传递给视图init函数来解决).

  • @SimpleAsCouldBe没有"正确"的方式,参见http://backbonejs.org/#FAQ-tim-toady"Backbone.js旨在对客户端代码中的许多常见模式进行相当不可知"......"参考文献模型和视图之间可以通过多种方式处理" (2认同)