我正在写一个backbone.js应用程序,并想知道如何调用视图函数:
directory.GroupsListView = Backbone.View.extend({
render:function () {
Mousetrap.bind(['mod+s'], function(e) {
self.group_save(e);
});
[... some render functions ...]
},
events: {
"submit": "group_save",
},
group_save: function() {
alert('jeah!');
}
});
我做错了什么?或者我必须在哪里放置Mousetrap绑定?
答案 0 :(得分:2)
我在任何地方都看不到var self = this
,所以大概是self
window.self
,而这不是你想要的。
您有多种选择:
在变量中抓取this
:
var _this = this; // Don't use `self` for the reasons noted above
Mousetrap.bind(['mod+s'], function(e) {
_this.group_save(e);
});
使用绑定功能:
Mousetrap.bind(['mod+s'], _(this.group_save).bind(this));
如果您喜欢$.proxy
以上的人,也可以使用Function.bind
或_.bind
(或其他一些库的功能绑定版本)。
每个实例绑定group_save
:
initialize: function() {
_.bindAll(this, 'group_save');
},
render: function() {
Mousetrap.bind(['mod+s'], this.group_save);
//...
我对Mousetrap一无所知,但是当您调用this
时,它可能允许您指定bind
(可能称为上下文),这是常见的模式将是Mousetrap.bind(..., fn, this)
但是Mousetrap可能不支持这样的事情。
另外,在删除视图时,不要忘记取消绑定捕鼠器。