2013-07-29 2 views
2

Каков правильный подход для установки значения в выпадающем списке в Extjs 4.2. До Extjs 4.2 комбобокс с удаленным хранилищем был установлен с использованием следующего фрагмента кода.Как установить значение для combobox с удаленным хранилищем в 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

Как это установить значение? Поле остается пустым? Он показывает идентификатор вместо имени? Или он работает сначала, а затем потеряет значение при расширении комбо? – rixo

+0

он работал без линии loadRawData до 4.2. Я хотел бы знать, если после 4.2 нам нужно загрузить данные и установить значение? Правильно ли это. –

+0

На самом деле это не простой вопрос. Обычный подход - это скорее дождаться загрузки загрузочного магазина перед его отображением (см., Например, [этот вопрос] (http://stackoverflow.com/q/17942315/1387519)). Но вам тоже интересно ... Как получить модель книги, которую вы пытаетесь загрузить в магазине? Предполагается, что ваш комбо-магазин должен быть загружен заранее? Удалённо? – rixo

ответ

0

Я думаю, что под загрузкой данных bookCombo.setValue(book.getId()); должно быть достаточно, чтобы установить значение в вашем комбо. Событие изменения должно срабатывать автоматически, как только вы установите значение. И остальное вызывается автоматически после звонка setValue

Думаю, вы испортите это, вызвав все это самостоятельно.

+0

Где вы видите в коде Ext JS, что загрузка загрузки запускается вызовом 'setValue' на комбо? 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 
    })); 
Смежные вопросы