2013-04-24 3 views
7

Ember를 사용하는 동안 누군가가 div 외부에서 클릭을 처리하는 더 좋은 방법을 찾았 으면 좋겠습니까? 전역 클릭 핸들러를 사용하여 jQuery 방법을 알았으므로 특정 인스턴스에 대해 수행 할 각 작업을 지정해야하지만 누군가 Ember보기에서이를 선언하는 방법을 찾길 바란다. 또한, 나는 'div에 탭 인덱스를주고 on blur를 사용하려고 시도했지만 Ember 액션은 이것을 허용하지 않는 것 같습니다.Ember -보기 외부에서 클릭 클릭

+1

나는 문제가 무엇인지 이해하지 않습니다. regexp 표현식을 기반으로 이벤트를 위임 할 수 있습니다. Ember.js 문서를 살펴 보더라도 jQuery의 .on() 메소드를 활용하는 것은 중첩 된 요소와 그렇지 않은 요소의 큰 하위 집합을 따라 위임 문제를 해결하는 데 사용하는 방법이라고 설명합니다. – Ohgodwhy

+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

답변

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

'detachClickHandler()'가 뷰의'willDestroyElement' 훅에서 호출된다고 가정하고 있습니까? – Zaki

+0

이벤트 네임 스페이스에 대해 알지 못했습니다. :) –

1

그냥 구성 요소의 믹스 인을 포함 onClickElsewhere을 구현

유용 ClickElsewhereMixin을 찾을 수 있습니다()