javascript - 用于在集合上添加事件的主干绑定(bind)

标签 javascript backbone.js backbone-events backbone.js-collections

我对 Backbone 集合有疑问。我试图监听集合中的所有事件:

  this.collection.on('all', function(ev) {
    console.log(ev);
  });

只有当我创建这样的记录时,集合才会触发事件:

  this.collection.create({name: 'aloha'});

但当我直接创建模型实例时则不然:

  var room = new Room({name: 'hello'}); // this code not trigger any events on collection
  room.save();

我是 Backbone 新手,但我认为第二个代码应该触发事件。有人可以帮助我吗?谢谢!

最佳答案

该事件不会在集合上触发,因为 room 模型未关联(即尚未添加)到 this.collection

假设您已经定义了类似于以下内容的模型集合:

var Room = Backbone.Model.extend();

var Rooms = Backbone.Collection.extend({
  model:Room
});

var rooms = new Rooms();

rooms.on('all',function(eventName) {
  console.log(eventName);
});

为了让您的代码按预期工作,您必须将 room 模型添加rooms 集合中,例如:

var room = new Room({'name':'hello'});

// This will trigger the add event on the collection
rooms.add(room);

// save the model
room.save();

以下是上述代码块的简写:

var room = rooms.create({'name':'hello'});

这是一个FIDDLE显示行为。

关于javascript - 用于在集合上添加事件的主干绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20736180/

相关文章:

javascript - JS - 如何找到最深的一对括号的索引?

javascript - Jquery Ui 日期时间选择器

javascript - 无法让文本插件与 IE 中的 requirejs 一起使用

jquery - 如何使用backbone.js制作搜索表单

backbone.js - Backbone - View 正在触发mouseout事件,即使它在根内部也是如此。

JavaScript:将 <div> 元素移到列中 2 个元素之后的右侧

javascript - Vue.js 中的循环变量与 AngularJS 类似

collections - 无法使用 Backbone.js 集合从 Twitter RESTful API 获取数据

javascript - 在获取之前检查模型属性

javascript - Backbone.js 查看事件未触发