如何让 Hammer JS 与 Backbone 一起工作

How to get Hammer JS to work with Backbone

我知道有人问过这个问题 here, there, and there

当我努力寻找正确的组合时,基于这些答案,我想我应该在这里总结一下,这样我们都可以更清楚、更容易地找到它。

首先,可以让 Hammer 与 Backbone 一起完美地工作。

要达到这个目标,您只需要遵循这个列表:

  1. hammer.js dependency 包含到您的项目中。
  2. Hammer's jQuery plugin 包含到您的项目中
  3. 创建一个 Hammer Manager 实例,以便您可以侦听 Hammer 事件。您应该在触发触摸事件的同一元素或封闭元素(通常为 your view element)上启动实例。 因此,像这样的东西应该出现在你的视图的 render() 函数的末尾:

    this.$el.hammer(); // Instantiates Hammer Manager
    
  4. 监听一个事件,就像你通常监听任何 javascript/jQuery 事件一样:

    events : { "pan #some_selector": "some_handler", }

  5. 在你的事件处理程序中,你可以在gesture属性中访问事件的属性,而不是像Hammer的文档中写的那样直接访问,如下:

    function some_handler : function(event) { console.log(event.gesture.deltaX); },

这应该可以让 Hammer 与您的 Backbone 应用程序完美配合。 我希望这有帮助! :)

使用 Require、Backbone 和 Hammer 进行了一些努力。这是对我有用的。

需要配置:

require.config({
    paths: {
        "jquery": "/bower_components/jquery/jquery",
        "underscore": "/bower_components/underscore/underscore",
        "backbone": "/bower_components/backbone/backbone",
        "hammerjs": "/bower_components/hammerjs/hammer",
        "jquery-hammerjs": "/bower_components/jquery-hammerjs/jquery.hammer"
    },

    shim: {
        "backbone": {
            deps: [ "jquery-hammerjs", "underscore" ],
            exports: "Backbone"
        },
        "underscore": {
            exports: "_"
        }
    }
});

查看文件

define( "myview", [ "backbone" ], function( Backbone ) {
    "use strict";

    return Backbone.View.extend( {
        el: ".my-el",

        events: {
            "tap .child-of-my-el": "handleTap"
        },

        initialize: function() {
            this.$el.hammer( { domEvents: true } );
        }
    } );
} );

注意 domEvents 选项。事件委托不适用于此。 Hammer docs states that this may slow things down a bit所以YMMV。