2012-11-21 46 views
0

我想updatePlays要调用的函数作为一个回调函数,当一个AJAX调用是成功的。我认为使用下划线绑定会让我引用'this'作为我实际想要更新的Collection对象,但是我在这里遇到了麻烦。当我到达应该更新集合的函数时,它认为'this'是指'窗口'。骨干:(回调)函数甚至没有绑定到收藏

在这种情况下,一个骨干模型骨干收集,这是从另一个骨干模型制作。

鉴于

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() 
    }, 
.... 

收集这是模型的一部分,芭比

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) 
     } 
    }) 
    }}) 

如果这是用下划线绑定实现的,何/如何将正确的方法是什么?

预先感谢您。

+0

不知道这是造成你的问题,但没有指定“变种”声明“玩”这将会使的范围之前“戏剧”全球,我认为这可能会造成问题,也与其他变量你缺少的'var' –

+0

是否这样做 - 它应该是我反正做的事情,但我仍然得到相同的错误。虽然谢谢!这里 –

+0

答案固定我的问题 - ###又见> http://stackoverflow.com/questions/9349666/binding-a-callback-in-backbone-js-and-underscore-js?rq=1 - 什么现在做? –

回答