我希望在 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)
}
})
}})
这是否可以通过下划线绑定来实现,正确的方法在哪里/如何?
先感谢您。