Мне нужна помощь по поводу комбинированного окна с множественным выбором в Extjs 4.
Мне нужно это в моих формах для простого отношения ManyToMany, разделенного центральной таблицей:
Пользователь -< User_Group> — группа.
Куда:
пользователь: id, имя, год
Группа пользователей: user_id, group_id
группа: id, имя
У меня нет проблем в форме создания пользователя, и я могу сохранить в базе данных по php все группы, которые я связал с помощью комбинированного списка.
Теперь у меня есть сетка со всеми моими пользователями, и когда я пытаюсь начать редактирование одного из них, выборки в комбинированном ящике не загружаются, но в поле комбинированного списка отображаются идентификаторы исправленных выборов.
Например:
Когда я пытаюсь редактировать этого пользователя (код JSON)
{
"id": 86,
"name": "tempname",
"year": 1492,
"groups_id": [1,2,3]
}
Форма редактирования заполнена всей информацией, а поле со списком отображается 1,2,3 , но ничего не выбрано в его выпадающем меню.
Это мой комбобокс:
{
xtype: 'combobox',
multiSelect: true,
name: 'groups_id',
fieldLabel: 'Group/s',
valueField: 'id',
displayField: 'name',
store: 'Groups',
allowBlank: false
}
Итак, почему ничего не выбирается при загрузке этой формы? И почему идентификаторы, которые я передаю для загрузки списка со списком (groups_id), не привязываются к нему?
Это неправильно структура JSON пользователя?
Я провел два дня на этом … и да … Я довольно новичок в ExtJs;)
Хорошо, мне удалось заставить вещи работать после нескольких бутербродов.
Проблема заключалась в том, что, когда я загружал запись для редактирования, record.get ( ‘groups_id’) был массив строка (например, [«1», «2», «3»]) в то время как Мне нужен массив целых (как это [1,2,3]).
Чтобы преобразовать / разобрать record.get ( ‘groups_id’) Я сделал это:
//from [ "1" , "2" , "3"] to [ 1 , 2 , 3]
//preparing an empty array for the parsed ids
var ids_integer = new Array();
//one by one, from string to int
record.get('groups_id').forEach( function(id){
ids_integer.push(parseInt(id));
});
//sobstitute the String Array with the Int Array
record.set('groups_id', ids_integer);
var view = Ext.widget('useredit');
view.down('form').loadRecord(record); //finally load record in my form
Других решений пока нет …