0

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

在这种情况下,一个主干模型具有主干集合,它是由另一个主干模型组成的。

鉴于:

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: Backbone.Model.extend({
  update: function() {
    this.get('slot').fetchAssociatedPlays(this.get('plays').updatePlays)
  },
})

模型插槽 - AJAX 调用

Slot:Backbone.Model.extend({

  ...

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

这是否可以通过下划线绑定来实现,正确的方法在哪里/如何?

先感谢您。

4

1 回答 1

0

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

callBack = _.bind(callBack, this);

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

于 2012-11-26T18:20:26.920 回答