【问题标题】:Backbone Collection 'add' event not firing骨干集合“添加”事件未触发
【发布时间】:2014-02-20 12:13:31
【问题描述】:

我的集合中有一个事件侦听器,它侦听“添加”事件,该事件似乎仅在我添加到路由器中的示例数据被添加时触发,但当我在视图中添加更多模型时不会触发,两者的代码如下:

收藏:

Application.Collection.extend({
  name: "todos/todos",
  initialize: function() {
    this.on("add", console.log("added"));
  },
  url: "/todo-application/todos"
});

路由器(这会触发一个事件):

collection = new Application.Collections["todos/todos"]();
var m = new Application.Model({
    title: 'Finish screencast',
    done: true
});
collection.add(m);

查看(这不会触发事件):

Application.View.extend({
  name: "todos/index",
  events: {
    "submit form": function(event) {
        event.preventDefault();
        var attrs = this.serialize();
        this.collection.add(attrs);
        this.$('input[name=title]').val('');
    }
  }
});

视图中的collection.add 确实有效,因为模型已添加到集合中并显示在屏幕上,但集合仅在示例时的初始页面加载时为我提供console.log()数据已添加...

编辑:

根据我的 Backbone Chrome 扩展,事件确实在触发,但由于某种原因,此事件绑定不起作用,我尝试使用 this.listenTo 而不是 .on

【问题讨论】:

  • 你在构造视图时是否传入了集合?例如new View({ collection: collection})

标签: javascript backbone.js


【解决方案1】:

当您在对象上使用on 函数时,您将callback 绑定到该对象上的event,并且callback 必须是一个函数,如下所示:

this.on("add", function() { console.log("added"); });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多