2013-07-29 2 views
2

Extjs 4.2에서 값을 콤보 상자에 설정하는 올바른 방법은 무엇입니까? Extjs 4.2 이전에는 원격 저장소가있는 콤보 박스가 다음 코드를 사용하여 설정되었습니다.extjs에서 원격 저장소로 콤보 박스에 값을 설정하는 방법 4.2

var book= Ext.create('Test.model.Book', bookValues); 
bookCombo.store.loadRawData([book]); 
bookCombo.setValue(book.getId()); 
bookCombo.setRawValue(book.get('name')); 
bookCombo.displayTplData = book.data; 
bookCombo.fireEvent('change', bookCombo, book.getId()); 

그러나 위 코드는 원격 조합의 값을 4.2 이후로 올바르게 설정하지 않습니다.

+0

어떻게 값을 설정하지 않습니까? 필드는 비어있는 채로 남아 있습니까? 그것은 이름 대신에 id를 보여줍니까? 아니면 처음에는 작동합니까? 그리고 콤보를 확장 할 때 가치를 잃어 버리십니까? – rixo

+0

이전에는 4.2 이전의 loadRawData 행없이 작업했습니다. 4.2 이후에 데이터를로드하고 값을 설정해야하는지 알고 싶습니다. 이것이 올바른 접근법인지 여부. –

+0

이것은 쉬운 질문이 아닙니다. 실제로 ... 일반적인 방법은 콤보 스토어가 표시되기 전에로드되기를 기다리는 것입니다 (예 : [이 질문] (http://stackoverflow.com/q/17942315 참조)./1387519)). 하지만 당신도 흥미 롭습니다 ... 당신이 가게에서로드하려고하는 책 ​​모델을 어떻게 얻습니까? 귀하의 콤보 스토어가 미리로드되어 있어야합니까? 그것은 먼가? – rixo

답변

0

아래 데이터를로드 할 때 bookCombo.setValue(book.getId());은 콤보의 값을 설정하기에 충분해야한다고 생각합니다. 변경 이벤트는 값을 설정하자 마자 자동으로 실행됩니다. 전화를 걸면 나머지는 자동으로 호출됩니다. setValue

나는이 모든 것을 직접 호출하여 혼란 스럽다고 생각합니다.

+0

콤보에서 'setValue' 호출에 의해 저장소 로딩이 트리거되는 Ext JS 코드는 어디에서 볼 수 있습니까? http://docs.sencha.com/extjs/4.2.1/source/ComboBox.html#Ext-form-field-ComboBox-method-setValue –

+0

@ChristiaanWesterbeek 전혀 아닙니다. 대답은 op 코드의 예제 코드를 목표로하고'setVale()'을 호출 한 후에 아무 것도 호출 할 필요가 없다는 것을 의미합니다 ... 여기로드가 발생합니다'bookCombo.store.loadRawData ([book]); ' – JJR

1

이것은 나를 미치게했지만 결국에는 해결책이 있습니다.

먼저 상점의 모델을 정의한 다음 새 모델 인스턴스로 값을 설정할 수 있습니다.

// model 
     Ext.define('UserSearchFieldModel', { 
     extend: 'Ext.data.Model', 
     fields: [ 
      {name: 'user_id', type: 'string'}, 
      {name: 'displayname', type: 'string'} 
     ] 
     }); 

// store 
     UserSearchField_Store = Ext.create('Ext.data.Store', { 
     model: 'UserSearchFieldModel', 
     remoteFilter: true, 
     proxy: { 
      type: 'ajax', 
      url: '...', 
      reader: { 
      type: 'json', 
      root: 'userList' 
      } 
     } 
     }); 

// field 
    { 
     itemId: 'userField', 
     xtype: 'combo', 
     queryMode: 'remote', 
     hideTrigger: true, 
     store: UserSearchField_Store, 
     displayField: 'displayname', 
     valueField: 'user_id' 
    } 

// set a initial value on load 
    this.down('#userField').setValue(Ext.create('UserSearchFieldModel', { 
     id: initialUser.id, 
     displayname: initialUser.name 
    })); 
관련 문제