我有一个搜索栏视图:渲染从基类的方法被称为在骨干
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对象不会显示明显的名称。) –
在原始问题中添加了编辑 –