0

このエラーの修正に大きな問題があります。

Backbone.jsにビューがあり、そのビューに対するいくつかのアクションをキーボードイベントにバインドしたいと思います。

これが私の見解です:

window.PicturesView = Backbone.View.extend({
    initialize : function() {
        $(document).on('keydown', this.keyboard, this);
    },
    remove : function() {
        $(document).off('keydown', this.keyboard, this);
    },
    render : function(eventName) {
        // blah blah blah
    },
    next : function() {
        // blah
    },
    prev : function() {
        // blah
    },
    keyboard : function(e) {
        console.log(e.keyCode);
        if (e.keyCode == 37) {
            this.prev();
            return false;
        }
        if (e.keyCode == 39) {
            this.next();
            return false;
        }
    }
});

キーボードを押すと、次のエラーが発生します: Uncaught TypeError: Object [object Object] has no method 'apply' これはjQueryによってトリガーされます。

これを読んだ後:Uncaught TypeError:Object[objectObject]にはメソッド'apply'がありません

私も試しました: $(document).on('keydown', function(e) { this.keyboard(e); }, this); しかし、それでも同じエラーが発生します。

そして: スタイル$(document).on('keydown', 'keyboard', this);events : { 'event' : 'action' }はありますが、何もしません。

コード内のどこかでjQueryを使用するだけでハックを見つけることができるかもしれませんが、私はイベント処理とバックボーンの専門家ではないので、それをうまく実行したいと思います。

はっきりしているといいのですが、ありがとう

4

2 に答える 2

1

@roatin-marthは正しかった。適用されていた「on」関数は、私が期待したバックボーン関数ではありませんでした。これにより、コンテキストをパラメーターとして渡すことができます。 $(document).on('keydown', this.keyboard, this);

これはjQueryセレクターであるため、適用されるのはjQueryです。したがって、コンテキストとリンクするためのプロキシが必要です。 $(document).on('keydown',$.proxy(this.keyboard,this));

助けてくれてありがとう。

于 2012-11-14T13:16:37.367 に答える
-1

バックボーンの一般的なイベント構文が機能するはずです。初期化コードを取り除き、試してみてください。

// code above unaltered
initialize : function() { }, // of course you can remove these two, it was just to clarify that they should be empty.

remove : function() { },

render : function(eventName) {
    // blah blah blah
    this.delegateEvents(); // just to have them re-bound if the view is removed
},

events: {
    'keydown': 'keyboard'
}
// rest of the code unaltered
于 2012-10-30T17:25:44.610 に答える