从渲染函数调用视图函数

时间:2013-09-02 21:34:02

标签: backbone.js

我正在写一个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绑定?

1 个答案:

答案 0 :(得分:2)

我在任何地方都看不到var self = this,所以大概是self window.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));
    

    如果您喜欢$.proxy以上的人,也可以使用Function.bind_.bind(或其他一些库的功能绑定版本)。

  3. 每个实例绑定group_save

    initialize: function() {
        _.bindAll(this, 'group_save');
    },
    render: function() {
        Mousetrap.bind(['mod+s'], this.group_save);
        //...
    
  4. 我对Mousetrap一无所知,但是当您调用this时,它可能允许您指定bind(可能称为上下文),这是常见的模式将是Mousetrap.bind(..., fn, this)但是Mousetrap可能不支持这样的事情。

    另外,在删除视图时,不要忘记取消绑定捕鼠器。