3

我想委託所有touchstart事件作爲默認的iPhone和其他「觸摸瀏覽器」定義的點擊處理程序。我想出了兩種方法:委派touchstart事件點擊處理程序

1)擴大Ember.View委派所有touchstart事件單擊處理程序(S):

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)指定的(車把多個動作事件)模板:

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

兩種方法都不起作用。我錯過了什麼? Ember.Button實施similar(18625行)。

回答

1

你使用的是什麼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>註冊多個事件不起作用。如果您想處理超過1種類型的事件,則應使用自定義Ember.View

+0

謝謝!你的小提琴似乎很好。 Ember.alias是一種新的方法嗎? – lipp

+0

我更新了小提琴http://jsfiddle.net/3c9bg/3/以允許使用真實設備進行測試。順便說一句,它實際上與iPhone移動Safari瀏覽器預期的工作。 – lipp

+0

不,它已經有一段時間了,它可能沒有記錄。但是可用的文檔,請參閱http://emberjs.com/api/classes/Ember.html#method_alias – pangratz