1

私は Backbone.Marionette と RequireJS を hammerJS 実装で使用しており、backbone.hammer を使用しようとしましたが、ItemView で次のエラーが発生します。

Uncaught TypeError: Object [object Object] has no method 'undelegateHammerEvents'

なぜこれが発生するのか正確にはわかりません.Backbone.View拡張機能が不適切であるか、依存関係の委任が不適切である可能性があります. 知らない。しかし、その理由が言われているので、デフォルトのイベントバインディングを使用してハンマーイベントをjQueryに結び付けて、次のようなことができるようにしたいと思います:

$('.myElement').on('dragstart', handler);

それよりも:

$('.myElement').hammer().on('dragstart', handler);

これは可能ですか?

4

2 に答える 2

1

この回答はおそらくあなたを助けるのに少し遅れていますが、他の誰かが恩恵を受けるかもしれません.

マリオネットの前にbackbone.hammer がロードされていることを確認する必要があります(一度だけロードする必要があります)。backbone.hammer (痛そうに聞こえますよね?) は、「その場で」拡張します (つまり、直接変更Backbone.Viewします) -- ご存じのとおり、これは の基底クラスですMarionette.View

したがって、マリオネットがbackbone.hammer のにロードされると、必要なハンマー化されたバージョンではなくMarionette.View「処女」が拡張され、backbone.hammer の変更は事実上失われます (直接使用しない限り)。Backbone.ViewBackbone.View

backbone.hammer に関するこの同じ問題は、質問を投稿する前日にバグとして報告されました。ここでの議論を参照してください。

https://github.com/wookiehangover/backbone.hammer/issues/2

マリオネットの前にbackbone.hammer が同期的にロードされるようにする方法はいくつかあります。最も簡単な (そして最も粗雑な) 方法は、Marionette のソースを編集して、依存関係として backbone.hammer を追加することです。

于 2015-04-08T23:44:34.037 に答える
0

jQuery の「on」メソッドをオーバーライドしてみることができます。

var originalOn = $.fn.on;
$.fn.on = function() {
  return originalOn.apply(this.hammer(), arguments);
}

次に、すべての呼び出しで「hammer()」を使用せずに、説明したように使用できます

于 2013-11-02T15:56:22.873 に答える