【问题标题】:Backbone: (Callback) function even not binding to CollectionBackbone:(回调)函数甚至没有绑定到 Collection
【发布时间】:2012-11-21 23:33:54
【问题描述】:

我希望在 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)
  },
})

Model Slot - 执行 AJAX 调用

Slot:Backbone.Model.extend({

  ...

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

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

提前谢谢你。

【问题讨论】:

  • 不确定它是否会导致您的问题,但在声明 'plays' 而不指定 'var' 之前它将使 'plays' 的范围全球化我认为这可能会导致问题,与其他类似您缺少“var”的变量
  • 做到了 - 无论如何我都应该这样做,但我仍然遇到同样的错误。不过谢谢!
  • 这里的答案解决了我的问题 - ###另请参阅 > stackoverflow.com/questions/9349666/… - 现在该怎么办?
  • Ji Mun,你应该发布你自己问题的答案并接受它,这样人们就不会无缘无故地继续阅读它。
  • 由于某种原因,Stackoverflow 不允许我现在发布...一旦这个错误消失,我会处理这个问题。对此感到抱歉。

标签: javascript backbone.js underscore.js


【解决方案1】:

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

callBack = _.bind(callBack, this);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多