0

我有一个使用 jQuery UI 按钮的简单 Backbone 视图。

例如,我有一个删除按钮,它应该删除模型(和视图)。我设法使用以下方法将按钮添加到渲染方法中的视图:

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”也不起作用。此外,将模型或视图作为参数传递给方法似乎不起作用,因为参数将是点击事件。

用主干处理此类回调的正确方法是什么?

4

2 回答 2

1

函数的上下文在绑定为 jQuery 事件时会发生变化。

使用另一个函数,您在其中使用selfjQuery.proxy
通过以下方式维护上下文的示例:http $.proxy: //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();});​
于 2012-06-20T09:40:21.827 回答
1

您可能想改用backbone.viewevents 属性。这是建议的方法,而不是在渲染期间手动使用 jQuery 将事件绑定到子元素。 http://documentcloud.github.com/backbone/#View-delegateEvents

就像将它添加到您的视图一样简单:

events: {
    "click #deleteButton": "deleteView",

  },
于 2012-06-20T09:47:13.757 回答