2014-09-10 4 views
1

입력 텍스트 필드 "workItemTextField"에서 텍스트 값을 가져오고 싶습니다만 아래의 코드로 실행하는 keypress 이벤트를 가져올 수 없습니다. rallytextfield의 청취자

Ext.define('CustomApp', { 
    extend: 'Rally.app.App', 
    componentCls: 'app', 
    _onWorkItemKeyPress: function() { 
     console.log('In _onWorkItemKeyPress'); 
     console.log(this); 
    }, 
    launch: function() { 
     this.add({ 
      title: 'Time Entry', 
      width: 800, 
      padding: 10, 
      bodyPadding: 10, 
      renderTo: Ext.getBody(), 
      layout: { 
       type: 'vbox', 
       align: 'bottom' 
      }, 
      items: [ 
      { 
       xtype: 'rallytextfield', 
       itemId: 'workItemTextField', 
       fieldLabel: 'Work Item ID', 
       labelAlign: 'top', 
       listeners: { 
        scope: this, 
        keypress: this._onWorkItemKeyPress 
       } 
      }] 
     }); 
    } 
}); 

나는이 리스너를 교체 화재를 얻을 수있었습니다 :

listeners: { 
    keypress: { 
     element: 'el', 
     fn: this._onWorkItemKeyPress 
    } 
} 

을하지만 내가 무엇을 기대 반환하지 않습니다. "this"는 텍스트 필드이지만, getValue()를 호출 할 수 없으며, API에서 보았을 때 전달할 것으로 기대되는 속성은 내가 기대하는 것이 아닙니다. 첫 번째 인수는 이벤트이며 두 번째는 확실하지 않으며 세 번째는 html 요소입니다.

apps/2.0rc3/sdk.js를 사용하고 있습니다. 나는 온라인에서 찾을 수있는 모든 코드를 살펴 봤는데, 나는이 코드를 정확히 흉내 내고있는 것처럼 보였지만 내가 놓친 것이있을 것임에 틀림 없다. 내가 뭘 잘못 했니?

답변

1

specialkey을 사용하여 ENTER를 기다린 다음 _onWorkItemKeyPress(field)을 호출하여 rallytextfield의 값을 가져올 수 있습니다. 이 경우 field.getValue()이 작동합니다. 목표가 사용자가 입력 한 전체 값을 얻는 것이 아니라면 키 누르기를 사용하지 말고 사용자가 입력을 완료 할 때까지 기다리는 것이 좋습니다.

Ext.define('CustomApp', { 
    extend: 'Rally.app.App', 
    componentCls: 'app', 
    items:{ html:'<a href="https://help.rallydev.com/apps/2.0rc3/doc/">App SDK 2.0rc3 Docs</a>'}, 
    launch: function() { 
     var that = this; 
     that.add({ 
      title: 'My Text', 
      itemId:'mytext', 
      width: 800, 
      padding: 10, 
      bodyPadding: 10, 
      layout: { 
       type: 'vbox', 
       align: 'bottom' 
      }, 
      items: [ 
      { 
       xtype: 'rallytextfield', 
       itemId: 'workItemTextField', 
       fieldLabel: 'Work Item ID', 
       labelAlign: 'top', 
       listeners: { 
        specialkey: function(field, e){ 
         // e.HOME, e.END, e.PAGE_UP, e.PAGE_DOWN, 
         // e.TAB, e.ESC, arrow keys: e.LEFT, e.RIGHT, e.UP, e.DOWN 
         if (e.getKey() == e.ENTER) { 
          that._onWorkItemKeyPress(field); 
         } 
         else{ 
          console.log('?'); 
         } 
        } 
      } 
      }] 
     }); 
    }, 
    _onWorkItemKeyPress:function(field){ 
     console.log('value:',field.getValue()); 
    } 
}); 
+0

고마워요! 그게 효과가있어! 예, keypress에 대한 함수 호출에서 ENTER를 확인하려고했으나 아무 함수도 호출하지 못했습니다. 또한, 나는 "specialkey"에 대해 몰랐다. 그것은 우리의 위대한 일을 할 것입니다. "keypress"청취자가 작동하지 않는 이유가 여전히 의아해했지만, 적어도이 문제는 저에게 전달되었습니다. 다시 한 번 감사드립니다! –