AJAX 呼び出しが成功したときにコールバック関数として updatePlays 関数が呼び出されるようにします。アンダースコア バインドを使用すると、実際に更新したい Collection オブジェクトとして 'this' を参照できると思っていましたが、ここで問題が発生しました。コレクションを更新する関数にたどり着くと、「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)
}
})
}})
これはアンダースコアバインドで達成できるはずですか?どこで/どのように正しい方法になりますか?
前もって感謝します。