2014-10-14 2 views
0

텍스트 필드를 감싸는 엠버 구성 요소가 있습니다. 사용자가 입력 할 때 검색 작업을 시작하려고합니다. 텍스트 필드가있는 Ember 구성 요소

#search-box.js.coffee 
App.SearchBoxComponent = Ember.Component.extend 
    classNames: ['form-group', 'has-feedback'] 
    term: "" 
    placeholder: "Search" 

    actions: 
    search: -> 
     console.log "Searching..." 

# search-box.emblem 
= input type="text" value=term class="form-control" placeholder=placeholder keyUp="search" 

는 값 및 기간 간의 바인딩을 유지하지만 KeyUp 이벤트는 검색 창 성분에 거품을 엠버 입력 요소로 진행하지 않는다. =을 삭제하고 대신 표준 HTML 입력을 사용하면 작업이 올바른 구성 요소로 전송되지만 바인딩이 끊어져서 검색어가 손실됩니다.

구성 요소 내부에서 동작과 함께 입력을 사용하는 적절한 방법은 무엇입니까?

EDIT : 다른 방법 (이 경우, 제) 비 활동 기간 후에 검색의 추가 어려움 JQuery와 함께 수행하려고

:

App.SearchBoxComponent = Ember.Component.extend 
    classNames: ['form-group', 'has-feedback'] 
    delay: 1000 
    didInsertElement: -> 
    $input = @$('input') 
    $input.on 'keyup', => 
     clearTimeout(timer) 
     if $input.val 
     console.log this 
     timer = setTimeout(@_performSearch, @get('delay') 
    _performSearch: -> 
    console.log this 
    console.log "Searching for #{@get('q')}" 

_performSearch이 호출되면 this이 이제 window이고 Ember 클래스의 컨텍스트가 손실되었습니다. 또한 모든 기능을 화살표로 변경하여 아무런 기능도 변경하지 않고 this의 컨텍스트를 변경하려고 시도했지만 아무 소용이 없습니다. setTimeout 호출 내에서 익명 함수를 만들면 작동하지만 엠버 객체에 대한 메서드를 호출하면 작동하지 않습니다.

+0

ember의 keyUp을 사용하여 행운을 빕니다. 나는 결코 작동하지 않습니다 ...하지만 실제 텍스트 필드보기를 확장하는 구성 요소를 만들면 가능합니다. 실제 javascript keyup 이벤트를 사용하여 일부 동작을 트리거 할 수 있습니까? – Grapho

답변

0

당신은 jQuery를 마우스 구성 요소의 didInsertElement 후크에서 이벤트를 설정할 수 있습니다 : 두 번째 접근 방식에 대해서는

App.SearchBoxComponent = Ember.Component.extend 
    classNames: ['form-group', 'has-feedback'] 
    term: "" 
    placeholder: "Search" 

    didInsertElement: -> 
    @$('input').keyup => 
     console.log 'Searching...' 

을, 당신은 Ember.run.later을 사용하여 함수의 컨텍스트를 지정할 수 있습니다. 참고 : setTimeout으로 전화 한 후 닫는 괄호가 누락되었습니다.

내가 (코드에서 term) search_term의 값을 관찰하여 동일한 검색 역학을 구현했습니다

Ember.run.later(@,@_performSearch, @get('delay')) 
+0

나는이 코드의 이전 반복에서 이와 비슷한 것을 가지고 있었지만, 어떻게 든 나는 후속 메서드 호출에서 ember 클래스의 컨텍스트를 잃어 버렸기 때문에이를 버렸고, jquery가 아닌 솔루션을 기대했다. 나는 이걸 또 할거야. – DVG

+0

나는 위에 추가 한 몇 가지 문제가있는 다른 접근 방식을 사용하고 있습니다. 이견있는 사람? – DVG

0

timer = setTimeout(@_performSearch, @get('delay')) 

를 교체합니다. 나는 당신이 그렇게 할 수 있다고 생각합니다. 옵서버를 App.SearchBoxComponent에 설정하고 인 경우 search 액션을 실행해야합니다.

관련 문제