1

モバイルおよびデスクトップ バージョンのイベントを含むバックボーン ビューがあります。

events: {
  "touchstart .button": "action1",
  "mousedown  .button": "action1",
  "touchend   .button": "action2",
  "mouseup    .button": "action2",
}

モバイル デバイスから触れたときに発生するイベントを 1 つだけにしたい。現在、私のモバイル デバイスの 1 つで、action1 が 2 回起動されます。

このソリューションのカスタム メソッドを使用してみましたが、どういうわけか Android 2.3 では touchstart 後の touchend のカスタム メソッドは起動されませんが、純粋な「touchend」を使用すると代わりに起動されます。

したがって、「touchend」が起動されている場合、Backbone.js が「mouseup」の起動を防ぐことができるかどうかを考えています。

4

3 に答える 3

4

私には少しハックが少ないと感じる別のアプローチ:

タッチ イベントをテストし、アプリケーションの初期化時にグローバル変数を設定するのが好きです。

MyApp.clickEvent = ('ontouchstart' in window) ? "touchstart" : "mousedown";

次に、私の見解では、次のようなことを実行します。

events: function() {
    var _events = {};
    _events[MyApp.clickEvent + " .button"] = "action1";

    return _events;
}
于 2012-12-08T04:07:55.853 に答える
2

ハッキーな解決策の 1 つは、underscore.js関数throttleを使用して、関数を x ミリ秒ごとに 1 回だけ呼び出すことができるようにすることです。こちらのドキュメントをチェックして、ニーズに合っているかどうかを確認してください。

最終的な解決策は次のとおりです。

action1: _.throttle(function(params) {
    // Do what you do here
}, 400); // The timeframe within which the function can be called just once.
于 2012-06-26T07:27:16.867 に答える