无法在Backbone模型listenTo中直接调用fetch

时间:2015-06-22 04:32:11

标签: javascript backbone.js coffeescript

我试图让模型听取集合并在集合发生变化时自行获取:

class Team extends Backbone.Model
  urlRoot: '/team',

  initialize: function(attributes, options) {

    this.listenTo(members, 'change', this.fetch)

fetch确实会触发,但是url都搞砸了,为了让它工作,我必须将它包装在一个匿名函数中:

this.listenTo(members, 'change', function() {this.fetch();})

有趣的是,当我添加一个"测试"对模型起作用并将this.fetch()放在其中,它可以工作:

this.listenTo(members, 'change', this.test)

test: function() {
     this.fetch();
}

为什么我不能在this.fetchlistenTo进行操作?

1 个答案:

答案 0 :(得分:2)

每种类型事件的处理程序都传递一组参数。 Catalog of Events可以说"change"事件:

  
      
  • "变更" (型号,选项) - 当模型的属性发生变化时。
  •   

所以,如果你这样说:

this.listenTo(members, 'change', this.fetch)

然后fetch会像这样调用:

fetch(the_model_that_changed, some_options_object)

Model#fetch期望仅使用options对象进行调用。结果是fetch将在模型实例中查找options,结果很混乱。