2017-05-03 1 views
0

나는 엠버 (ember)를 처음 사용하므로 도움을 주셔서 감사합니다. 내 컨트롤러 내 행동에이벤트 객체를 매개 변수로 전달하는 방법 (컨트롤러의 작업에 대한 핸들 막대 템플릿에서)

{{input type="text" class="form-control" **focus-out= (action "ccFocusLost" event**) }} 

: 내 핸들 템플릿에서 (아래 굵게 표시된 텍스트를 참조) 초점 아웃 이벤트를 전달하려는 그러나

ccFocusLost : function(**event**) { 
     alert(event.relatedTarget.tagName); 
    }, 

, 내가 정의되지 않은 얻을 때 위와 같이하십시오. 주요 요소가 손실 된 후에 어떤 요소가 포커스를 받을지 알아 내기 위해 포커스 - 아웃 이벤트를 얻는 방법이 필요합니다.

미리 감사드립니다.

+0

일부 힌트를 줄 수도있는 내 대답 http://stackoverflow.com/a/43736820/5771666을 참조하십시오. 입력 도우미로이 작업을 수행 할 수 없습니다. – kumkanillam

+0

답변 해 주셔서 감사합니다.내 컨트롤러에서 이벤트를 얻으려면 위의 예제를 수정해야하는 사례를 알려 주실 수 있습니까? – John

+0

필자는 입력 헬퍼를 사용해 보겠다. 만약 성공하지 못한다면 아래의 옵션들과 함께 갈 필요가있다. Ember.TextField'와'focusOut' 메쏘드에서 확장 한 자신 만의 입력 헬퍼를 작성할 수있다. 당신은'event '개체. – kumkanillam

답변

0

컨트롤러에 focusOut 작업 처리기를 정의하고 해당 이벤트가 input 필드의 "form-control"클래스에서 왔는지 확인할 수 있습니다. 예 :

focusOut(event) { 
    /* if event did not come from desired input field, return here */ 
    /* else call the action as desired to process the focusOut event */ 
} 

또는 입력란을 감싸는 구성 요소를 만들어 컨트롤러가 아닌 구성 요소 수준에서 focusOut 이벤트를 정의 할 수 있습니다. 이벤트가 입력 필드에서 왔는지 확인해야 할 필요가 없습니다. 엠버의 이벤트 처리에 대한 자세한 내용

, 여기에 자세히 제공하는 가이드의 섹션 : Handling Events

+0

대답을 주셔서 감사합니다. 위의 코드를 기반으로 간단한 예제를 제공 할 수 있습니까? Ember님께 매우 새로운 순간부터 매우 높이 평가 될 것입니다. – John

+0

[예제] (https://ember-twiddle.com/ba49f45cbd935f65715cc57f26f8f8dd?openFiles=templates.application.hbs%2Ctemplates.components.input-wrapper.hbs)를 만듭니다. Ember Twiddle 당신이 따라 올 수있는 패턴을 보여줍니다. 희망이 도움이됩니다! – zureka

+0

좋은 예이며 매우 유용합니다. 고맙습니다. 그러나, 근무하는 프로젝트는 매우 복잡하고 새로운 구성 요소를 원하지 않습니다. 분명히이를 통해 할 수있는 방법이 있습니다. 또는 "템플릿에서 인라인 이벤트 처리기에 작업을 할당합니다 (클로저 작업을 만들고 인수로 이벤트 개체를 수신함)." 이 목표를 달성하기 위해 언급 된 방법의 예를 제공 할 수 있다면 매우 감사 할 것입니다. – John

0

두 가지를

  1. 당신이 작업이 자동으로 의지 대신 focus-outfocusOut를 사용하는 경우 jQuery 이벤트를 인수로 포함 시키십시오. 템플릿에서 지정할 필요가 없습니다.

{{input focusOut=(action "ccFocusLost") }}

    코드에서
  1. , 이벤트가 이미 행동에 전달되고, 그것은 JQuery와 이벤트의 relatedTarget의 속성이 null 단지입니다. 이것은 jQuery/Javascript 이벤트입니다. unrelated to Ember. here을 참조하십시오.

이 더 많은 정보를 relatedTargets에 거기, 그러나 단지 그것은 신중해야 document.activeElement

+0

답변 해 주셔서 감사합니다. 나는 focusOut을 focusOut로 대체하려고했다. 그러나 코드를 실행할 때 다음 오류가 발생합니다. "이 코드를 실행하면 다음 메시지가 나타납니다."Uncaught TypeError : 'setAttribute'undefined '속성을 읽을 수 없습니다.이 프로젝트는 ember 1.13을 사용하고 있습니다. 왜 이런 일이 일어나는가? – John

1

사용하는 것이 더 좋을 것 같다,하지만 여기에 솔루션입니다.

템플릿 (이벤트 인수를 가질 필요가 없습니다) : 나는 다음과 같은 코드가

{{input type="text" class="form-control" **focus-out= (action "ccFocusLost") }}

컨트롤러 : 그래서 핸들이 액세스 할 수있는 것 같다

 ccFocusLost : function() {  
      var targetId= event.relatedTarget.id;  
      alert(targetId); 
     }, 

그 사건을 논쟁으로 보낼 필요가 없다. 이 경우 id = button1 인 버튼을 누르면 경고에 button1이 표시됩니다.

+0

'ccFocusLost : function (event)'- 인수에서 가져오다 그렇지 않으면'event'가'Firefox'에서 정의되지 않을 수 있습니다. – kumkanillam

관련 문제