01.07.2012, 23:56
|
Профессор
|
|
Регистрация: 23.08.2008
Сообщений: 162
|
|
Заполнить несколько ComboBox одним запросом!
Продолжение
Как это сделать: ТЫЦЬ для 2-го Экса.
Я запнулся на формате передаваемых данных с сервера для:
1.
comboBoxStore = new Ext.data.JsonStore({
fields: [...],
proxy: {
type: 'ajax',
url: "Handlers/ХХХ.ashx",
reader: {
type: "json",
root: "Table1"
}
}
}); comboBoxStore.load();
Формат данных, только такой:
Код:
|
{'success':true, 'total':1, 'Table1': [{"Table1ID":"1","Table1Name":"шт","Table1Desc":"Одна штука"}]} |
Тут всё супер работает.
2)
dataStore - первое хранилище
digitStore - второе хранилище
........
comboStoreRequest = Ext.Ajax.request({
url: "Handlers/ХХХ.ashx",
success: function(result){
//Преобразуем JSON-ответ в объект
comboStore = Ext.util.JSON.decode(result.responseText);
//Загрузим массив данных первое хранилище
dataStore.loadData(comboStore.data);
//Загрузим массив данных во второе хранилище
digitStore.loadData(comboStore.digit);
},
//Метод
method: 'POST',
//Параметры вызова
params: {act : 'get_data'}
});
Формат данных, только такой:
Код:
|
[["1","шт","Одна штука"],[2, "шт2", "Одна штука2"],[3, ..., ...], ...] |
Если я правильно понял ...
Может кто пробовал ???
ASP.NET:
Для первого варианта делаю так:
List<object> list = new List<object>();
var data = new { Table1ID = dr[0].ToString(), Table1Name = dr[1].ToString(), Table1Desc = dr[2].ToString() };
JavaScriptSerializer serializer = new JavaScriptSerializer();
output = "{" + string.Format("'success':true, 'total':" + RecCount + ", 'Table1': [{0}]", string.Join(",", list.ConvertAll<string>(serializer.Serialize).ToArray())) + "}";
И как во втором случае в ASP.NET сформировать такой массив данных ???
|
|
02.07.2012, 10:38
|
|
Профессор
|
|
Регистрация: 19.12.2009
Сообщений: 164
|
|
Сообщение от potkin
|
Формат данных, только такой:
Код:
|
[["1","шт","Одна штука"],[2, "шт2", "Одна штука2"],[3, ..., ...], ...] |
Если я правильно понял ...
|
Не правильно
Код:
|
var
store = Ext.create("Ext.data.Store", {
fields: [
{ name: "id", type: "int" },
"name"
]
}),
data = [
{ id: 1, name: "Record# 1" },
{ id: 2, name: "Record# 2" },
{ id: 3, name: "Record# 3" },
{ id: 4, name: "Record# 4" }
];
store.loadData(data); |
__________________
"Helo, word!" - 17 errors 56 warnings
|
|
02.07.2012, 18:30
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
в демке сделано так.
mydata =
[
[1, 'John', 'Smith'],
[2, 'Fred', 'Jones']
];
store.loadData(mydata, false);
Для формирования массива arrayList должен подойти вроде.
ArrayList a;
ArrayList b = new ArrayList();
// заполнение
a = new ArrayList();
a.Add(1);
a.Add("John");
a.Add("Smith");
b.Add(a);
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 02.07.2012 в 20:54.
|
|
02.07.2012, 21:52
|
|
Профессор
|
|
Регистрация: 19.12.2009
Сообщений: 164
|
|
Сообщение от DjDiablo
|
в демке сделано так.
|
И шо?
Сообщение от DjDiablo
|
Для формирования массива arrayList должен подойти вроде
|
Насколько я понял у ТС проблема с выбором подходящего контейнера для последующей сериализации его в "обязательный" [ [ ], [ ], [ ] ]
__________________
"Helo, word!" - 17 errors 56 warnings
|
|
05.07.2012, 16:27
|
Профессор
|
|
Регистрация: 23.08.2008
Сообщений: 162
|
|
Ok, спасибо за ответы, будем пробовать )))
П.С. А, всё так, кто-то пробовал уже, одним "запросом" несколько Комбов заполнять данными ???
|
|
05.07.2012, 21:39
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
У меня есть решение своей задачи, по логике она должна удовлетворить и ваши потребности.
Однако принцип работы в отличии от предложенного в вашем примере, совершенно иной.
По условию задачи у меня есть форма, внутри формы есть гриды и dataview и мне их надо как то заполнять.
Решение реализовал на основании ассоциаций,
Суть в том что,главная модель имеет ассоциации hasMone с другими моделями. Ассоциированные hasmony модели, как известно хранятся в сторе, вот этот сторе я и передаю гриду. В примере заполняются два грида, но я могу сделать 50 ассоциаций и заполнить 50 гридов, или комбобоксов, или чёнидь ещё. И всё это собственно произойдёт одним запросом. С сохранением кстатии тоже нет проблем, я его так же могу производить одним запросом .
Вот Упрощённая демка, на которой я ставил эксперементы. Здесь к примеру я заполнил два грида.
Рабочий пример во вложении.
Ext.require([
'Ext.data.*',
'Ext.panel.Panel',
]);
Ext.onReady(function() {
//модель для первого грида
Ext.define('Group2', {
extend: 'Ext.data.Model',
fields: ['id', 'parent_id', 'name'],
});
//модель для второго грида
Ext.define('Group3', {
extend: 'Ext.data.Model',
fields: ['id', 'parent_id', 'name'],
});
// главная модель,
Ext.define('Group', {
extend: 'Ext.data.Model',
// у меня здесь данные для полей в форме, но в данном примере они не нужны
fields: ['id', 'parent_id', 'name'],
proxy: {
type: 'ajax',
url: 'data.json',
reader: {
type: 'json',
root: 'groups'
}
},
associations: [{
//ассоциация сформирует сторе для 1го грида
type: 'hasMany',
model: 'Group2',
primaryKey: 'id',
foreignKey: 'parent_id',
associationKey: 'child_groups' // read child data from child_groups
},{
//ассоциация сформирует сторе для 2го грида
type: 'hasMany',
model: 'Group3',
primaryKey: 'id',
foreignKey: 'parent_id',
associationKey: 'child_groups2' // read child data from child_groups
}]
});
//=======================================================================//
Group.load(2,{
success: function(group){
//выведем всю модель в консоль, чтобы её можно было поизучать
console.log(group);
group.group2s().each(function(rec){
console.log(rec.get('name'));
});
Ext.create('Ext.grid.Panel', {
title: 'Users',
store: group.group2sStore,
columns: [
{ header: 'id', dataIndex: 'id' },
{ header: 'name', dataIndex: 'name' }
],
height: 200,
width: 400,
renderTo: Ext.getBody()
});
Ext.create('Ext.grid.Panel', {
title: 'Users',
store: group.group3sStore,
columns: [
{ header: 'id', dataIndex: 'id' },
{ header: 'name', dataIndex: 'name' }
],
height: 200,
width: 400,
renderTo: Ext.getBody()
});
}
});
});
//образец данных
{
"success":true,
"groups": {
"id": 10,
"parent_id": 100,
"name": "Main Group",
"parent_group": {
"id": 100,
"parent_id": null,
"name": "Parent Group"
},
"child_groups": [
{
"id": 2,
"parent_id": 10,
"name": "Child Group 1"
},{
"id": 3,
"parent_id": 10,
"name": "Child Group 2"
},{
"id": 4,
"parent_id": 10,
"name": "Child Group 3"
}
],
"child_groups2": [
{
"id": 2,
"parent_id": 10,
"name": "Child Group 111"
},{
"id": 3,
"parent_id": 10,
"name": "Child Group 2222"
},{
"id": 4,
"parent_id": 10,
"name": "Child Group 3333"
}
]
}
}
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 05.07.2012 в 22:15.
|
|
05.07.2012, 22:57
|
Профессор
|
|
Регистрация: 23.08.2008
Сообщений: 162
|
|
DjDiablo,
О !!! Класс )))
Большое спасибо, будем пробовать !!!
|
|
|
|