2011-09-13 2 views
1

다음과 같은 구성의 콤보 상자가 있습니다. 밀리 세컨드하고 꺼질 수 표시됩니다 -ExtJs4 - 자동 완성 콤보 상자에 빈 텍스트가 표시되지 않습니다.

{ 
    fieldLabel:'Service', 
    xtype:'combo', 
    displayField: 'srvcDesc', 
    store: storeServiceCodeVar, 
    valueField:'srvcCD', 
    id:'serviceCodeId', 
    name:'serviceCodeName', 
    queryMode: 'remote', 
    queryDelay:100, 
    typeAhead: true, 
    minChars:0, 
    hideTrigger:true, 
    forceSelection:true, 
    maxHeight:23, 
    deferEmptyText:false, 
    autoSelect:true, 
    fieldStyle:'text-transform:uppercase', 
    listConfig: { 
     loadingText: 'Loading...', 
     // Custom rendering template for each item 
     getInnerTpl: function() { 
      return '<table width="200px"><tr><td height="5"></td></tr><tr valign="top"><td>Code:{srvcCD}</td></tr><tr><td height="2"></td></tr><tr valign="top"><td>Description:{srvcDesc}</td></tr><tr><td height="5"></td></tr></table>'; 
     }, 
     emptyText:'No Values Found' 
    } 
} 

문제는 서버에서 반환 된 데이터, 존재하지 않는 경우 (찾을 수 없습니다 값 값을 가진다) emptyText는 점이다. 해고 당하면 다음 쿼리까지 거기에 머물고 싶습니다. 그게 어떻게 가능해. 나는 deferEmptyText로 시도했지만 행운은 없다.

누군가가이를 밝힐 수 있습니까? ExtJS 4를 사용하고 IE9와 Mozilla에서 동작이 동일합니다.

미리 감사드립니다.

+0

또한이 문제로 어려움을 겪습니다. 예상대로 DOM에 emptyText 값이 추가되지만 서버에서 레코드가 반환되지 않으면 포함 요소의 높이가 0으로 설정됩니다. 현재 Ext JS 4 소스를 통해 영감을 얻고 있습니다 ... –

답변

2

소스를 단계별로 살펴보면 요소 높이를 0이 아닌 숫자로 설정할지 여부를 결정할 때 listConfig.emptyText에 대한 참조가없는 것처럼 보입니다.

Ext.form.field.Picker에서 상속받은 alignPicker() 기능을 무시하고 listConfig.emptyText에 대한 확인을 추가했습니다.

Ext.override(Ext.form.field.ComboBox, { 

    alignPicker: function() { 
     var picker, height; 

     if (this.isExpanded) { 
      // Get the picker component. 
      picker = this.getPicker(); 

      if (this.matchFieldWidth) { 
       // Set the default height to null, since we don't 
       // automatically want to have the height changed. 
       height = null; 

       // If our store exists, but the count is zero 
       // and we've got no emptyText defined... 
       if (picker.store && 
        picker.store.getCount() === 0 && 
        Ext.isEmpty(this.listConfig.emptyText)) { 
        // ...we set the height to zero. 
        height = 0; 
       } 

       // Set the size of the picker component. 
       picker.setSize(this.bodyEl.getWidth(), height); 
      } 

      if (picker.isFloating()) { 
       this.doAlign(); 
      } 
     } 
    } 

}); 

희망이 있습니다.

+0

안녕 다니엘, 해킹을 공유해 주셔서 감사합니다. 그 위대한. 저에게있어서, emptyText는 콤보 상자가 독립적으로 생성 될 때 완벽하게 작동하지만, 남아있는 응용 프로그램의 코드와 병합되면 표시를 멈 춥니 다. 또한 emptyText의 동작에 영향을주는 부분을 찾으려고합니다. 유용하다고 판명되면 여기에서 공유 할 것입니다. 시간 내 주셔서 다시 한번 감사드립니다. – netemp

+0

안녕하세요 - 귀하의 문제를 이해하고 있는지 잘 모르겠습니다. '독립적으로 창작 된'이란 무엇을 의미합니까? 기존 애플리케이션은 무엇입니까? 위에 설명 된 콤보 박스가있는 emptyText 문제는 ​​Ext JS 4의 알려진 버그입니다 (http://www.sencha.com/forum/showthread.php?147005-4.0.6-Combobox-listview-collapsed-when-an 참조). -empty-array-is-returned), 당분간이 해킹이 문제를 해결해야합니다. –

+0

게시물 Daniel에게 감사드립니다. '독립적으로 생성됨'을 언급함으로써 테스트 페이지를 작성하고 extjs 라이브러리를 포함하고 emptyText에 대한 테스트를 수행하면 나에게 잘 작동한다는 것을 의미했습니다. 그러나 그것을 응용 프로그램에 포함 시키면 작동하지 않습니다. 이 사실을 조사하면서 발견했으며, 이것이 우리가 응용 프로그램에서 수정 한 어떤 것 때문일 수 있음을 깨달았습니다. 그러나 당신이 제공 한 것을 보면서,이 모든 상황은 흠집처럼 보입니다. 해킹을 공유해 주셔서 감사합니다. – netemp

0

경고의 단어입니다. ExtJs 4-0-6을 사용하고 있는데 Ext.form.field.ComboBox에 몇 가지 코드가 있으며 더 이상 그냥 Ext.field.form.Picker의 메서드를 상속하지 않는 것으로 보입니다.

대신 위의 코드는 이제 ComboBox이 아닌 Ext.field.form.Picker의 코드를 직접 재정의해야합니다.

그러나 Sencha는 곧 4.1에서이 문제를 곧 해결할 것입니다.

관련 문제