【发布时间】: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