我有一个简单的Backbone视图,它使用jQuery UI的按钮。
例如我有一个删除按钮,它应该删除模型(和视图)。我设法使用以下内容在render方法中将按钮添加到视图中:
var self = this;
$(this.el).find("#deleteButton").button({text : false});
$(this.el).find("#deleteButton").bind( "click", self.deleteView);
然后我在视图中有相应的方法:
deleteView: function(){
console.log(this.model);
}
调用“deleteView”方法,但它会将“undefined”打印到控制台,因为“this”指的是按钮而不是视图。用“self”替换“this”也不起作用。此外,将模型或视图作为参数传递给方法似乎不起作用,因为参数将是click事件。
使用骨干网处理此类回调的正确方法是什么?
答案 0 :(得分:1)
当函数绑定为jQuery事件时,函数的上下文会发生变化。
使用其他功能,您可以使用self
或jQuery.proxy
通过$.proxy
:http://jsfiddle.net/bAeQZ/
var self = {
deleteView: function(){console.log(this.model)},
model: '...some model...'
};
$(document).click($.proxy(self.deleteView, self));
// Alternative without $.proxy:
$(document).click(function(){self.deleteView();});
答案 1 :(得分:1)
您可能希望使用backbone.view
events属性。这是建议的方法,而不是在呈现期间手动使用jQuery将事件绑定到子元素。 http://documentcloud.github.com/backbone/#View-delegateEvents
就像在视图中添加它一样简单:
events: {
"click #deleteButton": "deleteView",
},