【问题标题】:Backbone Model listenTo self骨干模型listenTo self
【发布时间】:2014-06-25 22:49:19
【问题描述】:

我正在尝试在我的模型中对自身进行 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
}

【问题讨论】:

  • 看到这个stackoverflow.com/questions/9439531/…,基本上:尝试this.on('change', ...)而不是listenTo
  • 我们可能在这里遗漏了一些关键部分。即使在 fetch 回调 jsfiddle.net/btks3 中,它似乎也有效
  • 使用“this.listenTo(this ...”没有什么问题。但是代码有问题。请发布你真正想要做的事情,因为上面有一些问题(即缺少逗号,缺少异步调用,id 是什么)。这是一个没有异步的小提琴:jsfiddle.net/btks3/1

标签: javascript backbone.js underscore.js


【解决方案1】:

目前,您的视图/模型仅侦听名为“change: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 事件侦听器,因为它使一次解除所有事件侦听器的绑定更加容易和安全。当您想停止收听时,只需拨打this.stopListening();,您应该不会出现内存泄漏。

【讨论】:

  • 这是不正确的。当您设置“projectData”时,Backbone 会自动触发“change:projectData”,因此您不必这样做。 backbonejs.org/#Model-set。其次,没有人谈论 jQuery 事件。你指的是“this.on()”吗,因为 Backbone 也使用这个命名法backbonejs.org/#Events-on
  • 是的,backbone 确实使用了“this.on()”,但是因为它提供了一种简洁(且安全)的方法(listenTo)来完成这项工作,为什么不使用它呢?但是您在“更改:属性”方面是正确的。我的错。
  • 使用“on”基本上是“this.listenTo(this..)”,但我认为 Jeremy 没有宣传“this.listenTo(this...)”,因为这听起来很奇怪:“我'正在听自己等着告诉自己一些事情,然后我会做一些事情”。=)但在编程世界中,遵循“listenTo”模式是我的偏好,所以我同意你,因为它只是我的一个功能需要知道,我知道它的作用。
【解决方案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

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2012-05-04
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多