我希望在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)
}
})
}})
这是否应该通过下划线绑定实现,以及在哪里/如何正确的方式?
提前谢谢。
答案 0 :(得分:0)
这个问题的答案帮助我解决了我的问题: Binding a callback in Backbone.js and Underscore.js
callBack = _.bind(callBack, this);
我需要使用一个函数,它是将第一个函数与某个对象绑定的结果。