0

我正在编写一个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!');
    }
});

我究竟做错了什么?或者我必须在哪里放置捕鼠器绑定?

4

1 回答 1

2

我没有看到var self = this任何地方,所以大概是你selfwindow.self,那不是你想要的。

您有多种选择:

  1. 获取this一个变量:

    var _this = this; // Don't use `self` for the reasons noted above
    Mousetrap.bind(['mod+s'], function(e) {
        _this.group_save(e);
    });
    
  2. 使用绑定函数:

    Mousetrap.bind(['mod+s'], _(this.group_save).bind(this));
    

    如果您更喜欢那些,也可以使用$.proxyor Function.bind(或其他库的函数绑定版本)_.bind

  3. 绑定group_save每个实例:

    initialize: function() {
        _.bindAll(this, 'group_save');
    },
    render: function() {
        Mousetrap.bind(['mod+s'], this.group_save);
        //...
    

我对 Mousetrap 一无所知,但它可能允许您在调用时指定一个this(可能称为contextbind ) ,常见的模式是Mousetrap.bind(..., fn, this)但 Mousetrap 可能不支持这样的事情。

另外,当你移除你的视图时,不要忘记解开你的捕鼠器的东西。

于 2013-09-02T22:14:13.637 回答