Backbone :(回调)函数甚至不绑定到Collection

时间:2012-11-21 23:33:54

标签: javascript backbone.js underscore.js

我希望在AJAX调用成功时将updatePlays函数作为回调函数调用。我认为使用下划线绑定会让我将'this'称为我实际想要更新的Collection对象,但我在这里遇到了麻烦。当我到达应该更新集合的函数时,它认为'this'指的是'window'。

在这种情况下,Backbone Model具有Backbone Collection,它由另一个骨干模型组成。

在视图中:

SomeView: Backbone.View.extend({
  someFunction: function(e) {
    var field = this
    this.picker = new PlayPicker({
      field:field,
      model: new PlaySet({
        plays: new Collections.Plays({}),
        slot: field.model
      })
    })
  }
}) 

PlayPicker:Backbone.View.extend({
 ...
  refresh: function () {
    this.model.update()
  },
....

该模型PlaySet的一部分

Plays:Backbone.Collection.extend({
  model: Play ,
  initialize: function () {
    plays = this
    _.bind(this.updatePlays, plays) // Where I thought I should bind
  },
  updatePlays: function (plays) {
    new_plays = []

    var i; 
    for (i = 0; i < plays.length; i++){
      new_plays.push(new Play({
        id: plays[i]["id"],
        text: plays[i]["text"]
      }));
    }

    this.reset(new_plays) // Uncaught TypeError: Object [object Window] has no method 'reset' 
  }
})

模型PlaySet

PlaySet: Backbone.Model.extend({
  update: function() {
    this.get('slot').fetchAssociatedPlays(this.get('plays').updatePlays)
  },
})

Model Slot - 进行AJAX调用

Slot:Backbone.Model.extend({

  ...

  fetchAssociatedPlays: function(update) {
    thisModel = this
    $.ajax({
      url: thisModel.associatedPlaysURL(),
      success: function (collection) {
        update(collection)
      }
    })
  }})

这是否应该通过下划线绑定实现,以及在哪里/如何正确的方式?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

这个问题的答案帮助我解决了我的问题: Binding a callback in Backbone.js and Underscore.js

callBack = _.bind(callBack, this);

我需要使用一个函数,它是将第一个函数与某个对象绑定的结果。

相关问题