2011-09-08 5 views
3

나는 sencha touch의 텍스트 필드에 목록 필터를 구현하려고합니다. 예를 들어 나는 여러 개의 연락처를 가지고 있는데 필드에 입력하면 이름별로 필터링 할 수 있습니다. 원형 X 버튼을 클릭하여 텍스트 필드를 지우면 모든 필터를 필터링하지 않도록 필터를 재설정하고 싶습니다.sencha touch textfield clear 이벤트

문제는 클리어 버튼의 클릭을 감지하는 방법을 찾지 못하는 것입니다. 어떤 유형의 이벤트도 보이지 않으며 해결 방법을 해킹 할 수 없습니다.

누구든지 sencha touch에서 텍스트 필드 비움을 감지하는 방법을 알고 있다면 나는 많은 의무가 있습니다.

사파리와 xcode 시뮬레이터에서 사용해 보았으며 sencha touch 1.1.0을 사용하고 있습니다. 내가 놓친 게 있니? 실제로 모바일 앱인 경우 문제가되지 않습니까?

답변

7

당신은 텍스트 필드 내부 clearIconContainerEl에 탭 이벤트를 수신하거나 onClearIconTap 방법을 대체 할 수 있습니다.

엽차의 터치에 대한
Ext.setup({ 
    icon: 'icon.png', 
    tabletStartupScreen: 'tablet_startup.png', 
    phoneStartupScreen: 'phone_startup.png', 
    glossOnIcon: false, 
    onReady: function() { 

     var searchField = new Ext.form.Search({ 
      name : 'search', 
      placeHolder: 'Search', 
      useClearIcon: true, 

      onClearIconTap: function() { 
       if (!this.disabled) { 
        this.setValue(''); 
        console.log('onClearTap: Clear button tapped!');      
       } 
      } 
     }); 

     var viewport = new Ext.Panel({ 
      fullscreen: true, 
      dockedItems: [{ 
       xtype: 'toolbar', 
       dock: 'top', 
       items: [searchField] 
      }] 
     }); 

     console.log(searchField.useClearIcon); 

     searchField.mon(searchField.clearIconContainerEl, { 
      scope: searchField, 
      tap: function() { 
       if (!this.disabled) { 
        console.log('clearIconContainerEl: Clear button tapped!'); 
       } 
      } 
     }); 
    } 
}); 
+1

명확한 이벤트를 발생 시키려면 ClearIconTap을 오버합니다. useClearIcon을 true로 설정하면 onClearIconTap이 발생하고 clear 이벤트를 catch 할 수 있습니다. onClearIconTap이 없으면 절대로 작동하지 않습니다. 나는 틀린 것을 입증하는 것이 매우 행복 할 것이다. 대답에 감사한다! – Hoopes

+0

그것은 또한 좋은 해결책입니다. 그리고 네, useClearIcon이 true 일 때만 가능합니다. :) – herkulano

+0

코드에 onClearIconTap 재정의를 추가했습니다. – herkulano

1

2.0 사용자 :

당신의 새로운 MVC 구조를 사용하는 경우, 당신은 컨트롤러 초기화

this.control({  
    '#yourTextFieldId clearicon': { 
      tap: function(){console.log('ClearICON tapped');} 
    } 
.... 
)}; 
1

문제에 이것을 사용할 수는 작은 X가에 의해 추가되지 않습니다됩니다 sencha touch. 그것은 html5와 함께 "검색"입력의 기능입니다. 이 이벤트를 캡처하려면 검색 이벤트를 찾아야합니다. (Ext.form.Text =들을 Ext.extend의 ​​내부

if (this.fieldEl) { 
     this.mon(this.fieldEl, { 
      focus: this.onFocus, 
      blur: this.onBlur, 
      keyup: this.onKeyUp, 
      paste: this.updateClearIconVisibility, 
      mousedown: this.onBeforeFocus, 
      search: this.onSearch, 
      scope: this 
     }); 

내선 -

if (this.fieldEl) { 
     this.mon(this.fieldEl, { 
      focus: this.onFocus, 
      blur: this.onBlur, 
      keyup: this.onKeyUp, 
      paste: this.updateClearIconVisibility, 
      mousedown: this.onBeforeFocus, 
      scope: this 
     }); 

이 수 - 내가 해결 방법이 내가 수정 엽차 - touch.js에게

을 편집했다. form.Field, {...

이제 검색 필드를 구현할 때 "검색"이벤트가 호출 될 때 호출 될 onSearch라는 함수를 만들 수 있습니다. "검색"이벤트는 호출 될뿐만 아니라 X 그러나 f를 위해 또는 Enter 키와 같은 몇 가지 항목이 있습니다. 결론은 sencha touch 1.1은이 이벤트를 전혀 확인하지 않고 X가 이벤트를 발생시키는 유일한 시간이므로 유일한 해결책은 sencha-touch.js를 수정하는 것입니다.

+0

실제로 sencha-touch.js 파일에서 무언가를 변경할 필요는 없습니다. 이 때문에 Sencha 라이브러리의 최신 버전으로 업데이트하는 것이 매우 어렵습니다. 자신의 파일에서 기능을 재정의하는 것이 좋습니다. 모든 자바 스크립트이므로 그렇게하는 데 문제가 없습니다. – Odi