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!');
    }
});

私は何を間違っていますか?または、Mousetrap バインディングをどこに配置する必要がありましたか?

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 はそのようなことをサポートしていない可能性があります。

また、ビューを削除するときは、Mousetrap のものをアンバインドすることを忘れないでください。

于 2013-09-02T22:14:13.637 に答える