骨干模型听自己

时间:2014-05-08 13:43:32

标签: javascript backbone.js underscore.js

我正在尝试在我的模型中对自己进行listenTo绑定,但无法使其工作。我不确定我做错了什么:

initialize: function() {
  this.listenTo(this, "change:projectData", this.processData);
}

setProject: function(id) {
  //do async call and get someData variable
  this.set('projectData', someData);
}

processData: function(data) {
  debugger; //not triggering
}

2 个答案:

答案 0 :(得分:-2)

目前,您的视图/模型仅侦听名为"更改:projectData" (尽管documentation suggests otherwise。我也不能以这种方式工作),而不是改变事件本身。要让它听取特定事件,您必须将this.trigger("change:projectData");添加到setProject-function。

initialize: function() {
  this.listenTo(this, "change:projectData", this.processData);
}

setProject: function(id) {
  this.set('projectData', someData);
  this.trigger("change:projectData");
}

processData: function(data) {
  debugger; //not triggering
}

我强烈建议您使用listenTo而不是任何其他jQuery的事件侦听器,因为它可以更轻松,更安全地一次取消绑定所有eventlisteners。当你想要停止聆听时,只需致电this.stopListening();,你就应该免受memoryleaks的攻击。<​​/ p>

答案 1 :(得分:-2)

您需要触发事件change:projectData

所以这段代码:

setProject: function(id) {
  //do async call and get someData variable
  this.set('projectData', someData);
}

应该是这样的:

setProject: function(id) {
   //do async call and get someData variable
   this.trigger('change:projectData', someData);
   //or Backbone.trigger(...)
}

文档:http://backbonejs.org/#Events-trigger