Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Проблема при использовании Store.add() (https://javascript.ru/forum/extjs/49095-problema-pri-ispolzovanii-store-add.html)

vadii 29.07.2014 10:47

Проблема при использовании Store.add()
 
Добрый день.

Использую ext-4.0.0.

Задача: сформировать содержание Grid.Panel из данных, частично полученных с сервера через AJAX,
а частично прямо из кода, программно.

Фрагмент кода:

Ext.define('ActionDepartModel', {
extend: 'Ext.data.Model',
idProperty: 'iddept',
fields: [{
name: 'title',
type: 'string'
}]
});
Ext.define('ActionDepartStore', {
extend: 'Ext.data.Store',
autoLoad: false,
model:'ActionDepartModel',
proxy: {
type: 'ajax',
url: 'action.php'
}
});
Ext.define('ActionDepartListPanel', {
extend: 'Ext.grid.Panel',
alias: 'widget.ActionDepartListView',
autoScroll: true,
region:'center',
store: Ext.create('ActionDepartStore'),
title: 'Подразделения',
hideHeaders: true,
selModel: {
mode: 'MULTI'
},
columns: [{
flex: 1,
dataIndex: 'title'
}]
});

При выполнении ActionDepartListPanel.getStore().load() в Store формируется массив данных типа
[ {internalId:1, data.title:'подразделение 1'},
{internalId:2, data.title:'подразделение 2'},
{internalId:3, data.title:'подразделение 3'}
]

И это хорошо.

При выполнении ActionDepartListPanel.getStore().add(
{iddept:4, title:'подразделение 4'},
{iddept:5, title:'подразделение 5'}
);

в Store формируется массив данных типа
[ {internalId:1, data.title:'подразделение 1'},
{internalId:2, data.title:'подразделение 2'},
{internalId:3, data.title:'подразделение 3'},
{internalId:'ext-record-1', data.title:'подразделение 4'},
{internalId:'ext-record-2', data.title:'подразделение 5'}

]

Вопрос: как в коде, программно (без обращения к серверу) добавить записи в Store так,
чтобы у них сформировались нормальные internalId, из поля, описанного в Model.idProperty?

Спасибо.

Raydezm 02.08.2014 01:47

Вы бы отформатировали бы код, а то так никто не возьмется.
И версия именно 4.0.0?

Raydezm 02.08.2014 02:01

Клиент то не знает какие ID будут присвоены этим элементам на сервере после синхронизации, мало ли.
И вообще internalId это весьма приватное свойство, есть кейсы где необходимо, но лучше использовать getId() ...... который должен вам вернуть как раз уже 'iddept', если не то - опишите ваш кейс.

vadii 04.08.2014 14:34

С фоматированием действительно неудобно получилось. Пробовал. Не работают сдвиги абзаца вправо в редакторе форума.

Относительно InternalId и прочих неровносте в коде - не главное это.

Главное: не удалось подсунуть в GridPanel.getStore().add() свои данные, чтобы он их нормально (предсказуемо) отработал.

Получилось через GridPanel.getStore().add(GridPanel_2.getSelectionM odel().getSelection().copy()).

Для информации.
Мною решалась довольнно часто используемая задача: из одного списка выбрать несколько значений и внисти в другой список. Списки можно формировать через Grid.Panel.

Эта задача уже реализована через Ext.ux.form.MultiSelect и Ext.ux.form.ItemSelector. Но реализована как-то очень громоздко.
Пришлось эту задачу решить по-своему.

И еще. В такой задаче часто нужно использовать группировку значений через Ext.grid.feature.Grouping.

Так вот в версии <=4.2.2 эта группировка не работает. Проверено.
Работает на 5.0.0. На нее и перешел.


Часовой пояс GMT +3, время: 10:08.