来自Java世界,我在视图中添加了自定义方法,但是由于某些原因,我无法在视图中调用它们。似乎Backbone.View.extend的行为不符合我的预期。
...
var TreeView = Backbone.View.extend({
el: '#org-tree',
initialize: function() {
eventBus.on("route:change", this.triggerFilterEvent);
this.listenTo(treeItems, 'sync', this.render);
treeItems.fetch({
reset: true
});
},
render: function() {
...
},
foo: function() {
console.log("foo");
},
triggerFilterEvent: function(name) {
this.foo();
...
}
});
...
以下代码将导致Uncaught TypeError: Object #<Object> has no method 'foo'
。我的其他自定义方法triggerFilterEvent
已注册为eventHandler回调,但是效果很好。
1)为什么呢?2)如何通过声明TreeView特定方法来重用代码?
我相信问题在于,this
您的triggerFilterEvent
函数中引用的是eventBus
对象而不是视图。尝试以下方法:
eventBus.on("route:change", _.bind(this.triggerFilterEvent, this));
这是可用的便利的Underscore方法之一。更多信息在这里
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句