javascript - 将 touchstart 事件委托(delegate)给单击处理程序

标签 javascript model-view-controller mobile ember.js handlebars.js

我想将所有 touchstart 事件委托(delegate)给定义的点击处理程序作为 iPhone 和其他“触摸浏览器”的默认设置。我想出了两种方法:

1) 扩展 Ember.View 以将所有 touchstart 事件委托(delegate)给点击处理程序:

 Ember.View.reopen({
      touchStart: function(event) {
         return this.click(event);
      }
 });

 App.SomeView = Ember.View.extend({
      click: function(event) {
         console.log('should be fired for click and touchstart events');
      },          
 });

2) 在 (handlebars) 模板中指定多个 Action 事件:

  <i {{action someAction on="click,touchStart"}} ></i>

这两种方法都行不通。我错过了什么? Ember.Button 已实现 similar (第 18625 行)。

最佳答案

您使用的是哪个 Ember.js 版本?以下示例适用于最新的 Ember.js v1.0.0-pre2 , 请参阅 http://jsfiddle.net/pangratz666/3c9bg/ :

App = Ember.Application.create({});

Ember.View.reopen({
    touchStart: Ember.alias('click'),
    click: function() {
        console.log('clicki di click OR touchi di touch');
    }
});

Ember.View.create({
    elementId: 'leViewId',
    templateName: 'leViewTemplate'
}).append();

Ember.run.later(function() {
    Ember.$('#leViewId').trigger('touchstart');
}, 500);
Ember.run.later(function() {
    Ember.$('#leViewId').trigger('click');
}, 1000);


通过 <i {{action someAction on="click,touchStart"}} ></i> 注册多个事件不起作用。如果你想处理不止一种类型的事件,你应该使用自定义 Ember.View .

关于javascript - 将 touchstart 事件委托(delegate)给单击处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13051352/

相关文章:

javascript - 如何在悬停 div 时开发编辑选项

css - 如何使这个 CSS 响应?

javascript - react-stripe-elements 没有检测到 Stripe.js

Javascript 慢加载技术

javascript - 更改类名称的函数存在问题

javascript - 当我改变我的移动 View 时我的图像的位置

design-patterns - 移动开发架构和设计模式

javascript - 经典 ASP 流控制的替代方案

php - PHP 和 JavaScript 模板的互换性(防止重复)

javascript - BackboneJS 模型/集合 urlRoot/URL 的意义