2012-06-02 4 views
0

я вызвать событие с одной точки зрения, как это:эль неопределен, когда событие срабатывает

select: function() { 
    // Shorthand for the application namespace 
    var app = brickpile.app; 
    // Trigger the selected event 
    app.trigger('selected', this.model); 
} 

и связывается с тем же событием в другой точке зрения:

initialize: function() { 
    // Shorthand for the application namespace 
    var app = brickpile.app; 
    // bind to the selected event 
    app.bind('selected', this.selected); 
}, 

в моей функции я получаю ток экземпляр el property?

selected: function (model) { 
    // find the input hidden located in this views el 
    $(this.el)... // is undefined 
}, 

что я пропустил?

+2

Возможно проблема сфера, попробуйте app.bind ('выбран', this.selected, это); – nikoshr

+0

@nikoshr Исправьте, спасибо за помощь! – Marcus

+0

Вы также можете '_.bindAll (это, 'selected')' в '' инициализировать'' и не беспокоиться о аргументе контекста 'bind'. –

ответ

1

Я процитирую Backbone FAQ, чтобы ответить на ваш вопрос

Binding «этот»

Пожалуй, самый распространенный JavaScript «Гоча» является тот факт, что при передаче функции в качестве обратного вызова , его значение потеряно. С Backbone, когда вы имеете дело с событиями и обратными вызовами , вам часто будет полезно полагаться на _.bind и _.bindAll из Underscore.js.

При привязке обратных вызовов к событиям с базой данных вы можете выбрать необязательный третий аргумент , чтобы указать это, которое будет использоваться при вызове обратного вызова .

Попробуйте

app.bind('selected', this.selected, this); 

или

_.bindAll(this, 'selected'); 
app.bind('selected', this.selected); 
Смежные вопросы