2012-02-19 2 views
3

У меня есть следующий код:Связывание обратного вызова в Backbone.js и Underscore.js

initialize: function() { 
    _.bindAll(this); 

    var callBack = function(res) { 
     window.item = new Item(res); 
     this.render(); 
    }; 

    _.bind(callBack, this); 

    $.get('/item/parse', { 
     uri: decodeURIComponent($.urlParam('uri')), 
     title: decodeURIComponent($.urlParam('title')) 
    }, 
     callBack 
    ); 
    }, 

намерение состоит в том, что делают() должна вызываться после функции $ .get заканчивается. Однако даже после привязки функции обратного вызова с _.bind я все равно получаю «Объект не имеет функции рендеринга» в консоли. Я неправильно использую функцию bind здесь?

ответ

6

_.bind возвращает новую функцию, так:

callBack = _.bind(callBack, this); 

Вы также можете использовать _.bindAll, но вы должны назвать его после вы определяете функцию. В противном случае нет функций в то время, когда вы вызываете _.bindAll. Обратите внимание, что в этом случае вы должны использовать this.callBack = ..., потому что иначе this не будет содержать никаких функций.

Использование как _.bind, так и _.bindAll является излишним.

2

Обычно я пишу 'load' метод на моей модели, который я передаю как параметр обратного вызова. Затем я вызываю этот метод из метода render() в представлении и делаю все, что мне нужно сделать в функции обратного вызова (конечно, этот обратный вызов запускается в модели после загрузки данных).

Смежные вопросы