ComboBox.store.loadData не может загрузить массив из одного элемента - PullRequest
3 голосов
/ 16 июля 2011

Я использую ExtJS 3.4. У меня есть структура с данными для комбинированного списка, как это:

var a = [[1,"text1"],[2,"text2"]]

Я загружаю это так:

ComboBox.store.loadData(a);

Но когда у меня есть только 1 элемент в массиве

var a = [[1,"text1"]]

тогда он вообще не загружается. Я прочитал это:

массив: массивы будут преобразованы в Ext.data.ArrayStore внутренне, автоматически генерируя имена полей для работы со всеми данными компоненты. Одномерный массив: (например, ['Foo', 'Bar']) A 1-мерный массив будет автоматически расширен (каждый элемент массива будет использоваться как для комбинированного значения valueField, так и displayField) 2-мерный массив: (например, [['f', 'Foo'], ['b', 'Bar']]) для многомерный массив, значение в индексе 0 каждого элемента будет предполагается, что это комбо valueField, в то время как значение в индексе 1 предполагается, что это combo displayField.

Но это не объясняет, как мне загрузить массив с одним элементом. Или что угодно, массив не должен быть нужен, главное - загрузить только один элемент. Я пытался загрузить это: Код:

[{id:1,text:"text1"}]
[[{id:1,text:"text1"}]]
{id:1,text:"text1"}

Даже при создании собственного ArrayStore:

Code:
 var store = new Ext.data.ArrayStore({
                            autoDestroy: true,
                            storeId: 'Store1',
                            idProperty:"id",
                            fields: ["id","text"]);
ComboBox.store = store;
ComobBox.store.loadData([{id:1,text:"text1"}]);

Но все загружается неправильно. Либо поле со списком пусто, либо вместо текста отображается идентификатор.

Я вижу, что если я лениво инициирую комбо: Код:

{"xtype":"combo","width":250,"fieldLabel":"my combo","value":31029,"forceSelection":true,"hiddenName":"ComboHiddenName","minChars":1,"triggerAction":"all","store":[[31029,"gdfs"]]}

тогда массив с одним элементом будет загружен успешно. На какие свойства ComboBox.store я должен обратить внимание, чтобы правильно настроить их для массива из одного элемента, который должен быть загружен правильно с помощью метода loadData?

Ответы [ 2 ]

1 голос
/ 16 июля 2011

ComboBox.store.loadData(var a); не будет работать для любых данных. Это подняло бы исключение Unexpected token var. Вместо этого следует использовать ComboBox.store.loadData(a); без var

0 голосов
/ 17 июля 2011
ComboBox.valueField = "id";
ComboBox.displayField = "text";
ComboBox.store = new Ext.data.ArrayStore({autoDestroy: true, fields: ["id", "text"]});
...