我想将所有 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/