2013-04-24 25 views
7

想知道是否有人在使用Ember时处理点击格外的更好方法?我知道jQuery的方式与全局点击处理程序,你必须指定每个动作采取某些实例,但我希望有人想出了一个方法来声明这在一个Ember视图。同样,我尝试了ol给一个选项卡索引和使用模糊,但Ember行动似乎不允许这样做。Ember - 处理视图外的点击

+1

我不明白是什么问题。您可以基于regexp表达式来委托事件,这不需要任何疯狂的事情。即使看一下Ember.js文档,也表明利用jQuery的'.on()'方法是他们用来解决嵌套或不嵌套元素的大型子集上的委托问题的方法。 – Ohgodwhy 2013-04-24 23:08:27

+1

您可以使用['didInsertElement']事件(http://stackoverflow.com/questions/11377215/can-i-give-the-view-a-show-up-animation-in-emberjs/11377899#11377899)事件启动一个插件和类似的东西。你应该使用['willDestroyElement'](http://emberjs.com/api/classes/Ember.View.html#event_willDestroyElement)去除绑定。或者,您可以使用['View#on'](http://emberjs.com/api/classes/Ember.View.html#method_on)。 – MilkyWayJoe 2013-04-25 00:15:49

回答

7

感谢您的意见。我又回去阅读jQuerys .on的文档。我不知道你可以命名空间事件。所以我把这两个意见,并结合他们这样的事情。

didInsertElement: function() { 
    Ember.run.next(this, 'attachClickHandler'); 
}, 

attachClickHandler: function(){ 
    var temp = this; 

    $(window).on("click." + temp.elementId, function (e){ 
     //...event here 
    }); 
}, 

detachClickHandler: function(){ 
    $(window).off("click." + this.elementId); 
}, 

这可以让事件针对每个视图实例,这正是我想要的。多谢你们!

+2

我假设从视图的'willDestroyElement'钩子中调用'detachClickHandler()'? – Zaki 2013-12-10 09:10:39

+0

我不知道事件namespacing :) – 2014-10-07 06:40:08

1

你会发现ClickElsewhereMixin有用

只是包括任何组件上的混入和实施onClickElsewhere()