我有一個搜索欄視圖:渲染從基類的方法被稱爲在骨幹
App.Views.SearchField = Backbone.View.extend({
events: {
'keyup' : 'setFilter'
},
setFilter: function() {
if (typeof this.filterCallback === 'function') {
var filter = this.$el.val();
this.filterCallback(filter);
}
},
setFilterCallback: function(filterCallback) {
this.filterCallback = filterCallback; //debounce here
}
});
其實例化:
App.searchBar = new App.Views.SearchField({
el: $('[data-role="top-search"]')
});
我連接到它從另一個視圖的初始化:
App.Views.PartnerCompanies = App.Views.baseView.extend({
initialize: function(options)
{
this.filter = '';
App.searchBar.setFilterCallback(this.updateFilter);
_.bindAll(this, "updateFilter");
}
render: function() {
console.log('rendering partnercompanies list');
// get data and show it.
}
updateFilter: function(filter) {
console.log('filter updated');
this.filter = filter;
this.render();
},
但它不起作用。
輸出是:過濾器更新後不會被調用
rendering partnercompanies list
filter updated [multiple times]
我render()
方法。
在調試器中檢查顯示Backbone.View
(祖父類)的render()
方法正在被調用。我很困惑,因爲我在另一種觀點中使用了相同的技術,並且工作正常。
編輯:
這updateFilter指App.searchBar
,而不是App.Views.PartnerCompanies
實例。
你如何實例化你的App.Views.PartnerCompanies?如果你在'updateFilter()'方法中使用'console.log(this)',你會得到什麼? (你必須在結果對象中進行深入探索才能確定它是什麼;在登錄到控制檯時,Backbone對象不會顯示明顯的名稱。) –
在原始問題中添加了編輯 –