У меня есть функция, которая возвращает 7 значений, я использовал кортеж, чтобы вернуть их, так как они не имеют одинаковый тип
тогда я сэрелизирую это
так что я могу прочитать мой результат json в моем скрипте js, и я могу получить к нему доступ через ItemN
взгляните на код:
public JArray getJsonData( )
{
//my queries here//
var vl = new List<Tuple<string, string, string, int, int, double, string >>();
vl.Add(new Tuple<string, string, string,int, int, double, string>
(item.Date , item.Adress, name, item.login, pwd, role, id));
}
JArray o = JArray.FromObject(vl);
return o;
}
мой магазин extjs4:
var myStore2 = new Ext.data.JsonStore({
fields: ['Item1', 'Item2', 'Item3', 'Item4', 'Item5', 'Item6', 'Item7'] ,
data: []
});
проблема в том, что теперь мне нужно вернуть еще один элемент, который сделает их 8 элементов в моем кортеже
так что я получаю эту забавную ошибку
the eight element of an eight tuple must be a tuple
поэтому я добавляю восемь элементов в виде кортежа, как и было запрошено.
проблема в том, что теперь я получаю этот формат json: (обратите внимание на 'Rest' в конце)
{Item1:"27-09-2011",Item2:"LA",Item3:"armance",Item4:"astrocybernaute",Item5:"P@ssw0rd",Item6:"Admin",Item7,Rest : {Item1 : 26 }}
проблема в том, что я не знаю, как получить к нему доступ в моем магазине extjs4. Item8 конечно не работает, Rest не работает, item1 тоже не работает !!
есть идеи, плз?
спасибо за ваше время
РЕДАКТИРОВАТЬ это мой новый магазин после предложения Мэтта Грира
Ext.define('MyModel', {
extends: 'Ext.data.Model',
fields: [
{ name: 'Item1' },
{ name: 'Item2' },
{ name: 'Item3' },
{ name: 'Item4' },
{ name: 'Item5' },
{ name: 'Item6' },
{ name: 'Item7' },
{ name: 'Item8', mapping: 'Rest.Item1' }
]
});
var myStore2 = new Ext.data.JsonStore({
model: 'MyModel',
proxy: {
type: 'ajax',
url: '',
autoLoad :true,
reader: {
type: 'json'
}
}
});
но все равно не работает
РЕШЕНИЕ
Я хочу отметить, что Store.loadData не учитывает отображение полей
Проблема в том, что команда sencha изменила поведение loadData, И это не то, что задокументировано таким понятным способом.
Добавьте следующее в базу кода (над кодом приложения, но ниже ext-all.js):
Ext.override(Ext.data.Store, {
loadDataViaReader : function(data, append) {
var me = this,
result = me.proxy.reader.read(data),
records = result.records;
me.loadRecords(records, { addRecords: append });
me.fireEvent('load', me, result.records, true);
}
});
затем используйте:
mystore2.loadDataViaReader(data)