16.06.2015, 14:03
|
|
Кандидат Javascript-наук
|
|
Регистрация: 07.06.2010
Сообщений: 146
|
|
Ext.view.MultiSelector
Всем привет.
Пользовался ли кто этим компонентом - Ext.view.MultiSelector
Опять же разбираясь на примере из kitchensink породил своё.. но есть ошибки с которыми по незнанию опять же не могу справиться..
Мой пример
Проблема:
При выборе справа (нажать на плюсик) выпадаем нужный список.. но как только выбираешь элемент - ошибка в консоли и интерфейс "теряется"..
Кто поможет ?
|
|
16.06.2015, 16:34
|
Профессор
|
|
Регистрация: 19.11.2012
Сообщений: 178
|
|
проблема связана с настройкой layout.
layout: {
type: 'hbox',
align: 'stretch'
},
В таком виде проблема не проявляется:
Ext.define("Ext.locale.ru.view.MultiSelectorSearch", {
override: 'Ext.view.MultiSelectorSearch',
searchText: 'Поиск...'
});
Ext.define("Ext.locale.ru.view.MultiSelector", {
override: 'Ext.view.MultiSelector',
emptyText: 'Нет элементов',
removeRowTip: 'Удалить эту позицию',
addToolText: 'Поиск элементов для добавления'
});
Ext.define('FiresAPP.model.Group', {
extend: 'Ext.data.Model',
idProperty: 'id',
fields: [{
name: 'id',
type: 'int'
}, {
name: 'name',
type: 'string'
}, {
name: 'descr',
type: 'string'
}],
schema: {
namespace: 'FiresAPP.model',
proxy: {
type: 'ajax',
pageParam: false,
startParam: false,
limitParam: false,
noCache: false,
url: 'data.js',
reader: {
type: 'json',
rootProperty: 'data'
}
}
}
});
Ext.define('FiresAPP.view.GroupForm', {
extend: 'Ext.window.Window',
alias: 'widget.group-form',
requires: [
'FiresAPP.model.Group',
'Ext.view.MultiSelector'
],
layout: {
type: 'fit'
},
title: 'Добавить группу',
closable: false,
modal: true,
resizable: false,
autoShow: true,
items: [{
xtype: 'form',
items: [{
xtype: 'fieldset',
title: 'Доступ к меню',
layout: 'anchor',
defaults: {
anchor: '100%'
},
items: [{
xtype: 'multiselector',
title: 'Элементы меню',
fieldName: 'name',
viewConfig: {
deferEmptyText: false,
emptyText: 'Нет пунктов меню'
},
search: {
field: 'name',
store: {
model: 'FiresAPP.model.Group',
sorters: 'name'
}
}
}]
}]
}]
});
Ext.application({
name: 'FiresAPP',
launch: function() {
Ext.widget('group-form');
}
});
Последний раз редактировалось novikov, 16.06.2015 в 16:37.
|
|
16.06.2015, 16:50
|
|
Кандидат Javascript-наук
|
|
Регистрация: 07.06.2010
Сообщений: 146
|
|
Вот это да..
novikov,
Большое спасибо за помощь.
|
|
16.06.2015, 18:19
|
|
Кандидат Javascript-наук
|
|
Регистрация: 07.06.2010
Сообщений: 146
|
|
novikov,
Можете подсказать, а каким образом значения выбранные в multiselector можно передать на сервер для сохранения ?
Свой пример обновил.. работает..
Последний раз редактировалось kolka, 16.06.2015 в 18:23.
|
|
17.06.2015, 10:56
|
Профессор
|
|
Регистрация: 19.11.2012
Сообщений: 178
|
|
могу только предположить... Можно попробовать использовать getStore(). Затем выполнить синхронизацию хранилища, позаботившись предварительно о соответствующих настройках прокси. Либо обойти все записи и собрать их ID при помощи each() и отправить их на сервер через Ext.Ajax.request().
пример
Ext.define("Ext.locale.ru.view.MultiSelectorSearch", {
override: 'Ext.view.MultiSelectorSearch',
searchText: 'Поиск...'
});
Ext.define("Ext.locale.ru.view.MultiSelector", {
override: 'Ext.view.MultiSelector',
emptyText: 'Нет элементов',
removeRowTip: 'Удалить эту позицию',
addToolText: 'Поиск элементов для добавления'
});
Ext.define('FiresAPP.model.Group', {
extend: 'Ext.data.Model',
idProperty: 'id',
fields: [{
name: 'id',
type: 'int'
}, {
name: 'name',
type: 'string'
}, {
name: 'descr',
type: 'string'
}],
schema: {
namespace: 'FiresAPP.model',
proxy: {
type: 'ajax',
pageParam: false,
startParam: false,
limitParam: false,
noCache: false,
url: 'data.js',
reader: {
type: 'json',
rootProperty: 'data'
}
}
}
});
Ext.define('FiresAPP.view.GroupForm', {
extend: 'Ext.window.Window',
alias: 'widget.group-form',
requires: ['FiresAPP.model.Group', 'Ext.view.MultiSelector'],
layout: {
type: 'fit'
},
title: 'Добавить группу',
closable: false,
modal: true,
resizable: false,
autoShow: true,
items: [{
xtype: 'form',
reference: 'groupform',
bodyPadding: 5,
layout: 'column',
width: 500,
items: [{
xtype: 'fieldset',
columnWidth: 0.6,
style: {
margin: '5px'
},
title: 'Информация группы',
layout: 'anchor',
defaults: {
anchor: '100%',
xtype: 'textfield',
msgTarget: 'side',
labelWidth: 115
},
items: [{
xtype: 'hiddenfield',
name: 'id',
fieldLabel: 'Label',
reference: 'id'
}, {
fieldLabel: 'Название группы',
name: 'name',
reference: 'name'
}, {
fieldLabel: 'Описание группы',
xtype: 'textareafield',
grow: true,
name: 'descr',
reference: 'descr'
}]
}, {
xtype: 'fieldset',
columnWidth: 0.4,
style: {
margin: '5px'
},
minHeight: 100,
title: 'Доступ к меню',
layout: 'anchor',
defaults: {
anchor: '100%'
},
items: [{
xtype: 'multiselector',
title: 'Элементы меню',
fieldName: 'name',
store: {
model: 'FiresAPP.model.Group'
},
viewConfig: {
deferEmptyText: false,
emptyText: 'Нет пунктов меню'
},
search: {
field: 'name',
store: {
model: 'FiresAPP.model.Group',
sorters: 'name'
}
}
}]
}]
}],
dockedItems: [{
xtype: 'toolbar',
dock: 'bottom',
ui: 'footer',
layout: {
pack: 'end',
type: 'hbox'
},
items: [{
xtype: 'button',
text: 'Сохранить',
handler: function(button) { // <-- ЗДЕСЬ!!!
var form = button.up('group-form');
var multiselector = form.down('multiselector');
var store = multiselector.getStore();
var ids = [];
store.each(function(record) {
ids.push(record.get('id'));
}, this);
Ext.Ajax.request({
url: 'myServerScript.php',
scope: this,
jsonData: {
ids: ids
},
success: function(response) {
}
});
}
}, {
xtype: 'button',
text: 'Отмена'
}]
}]
});
Ext.application({
name: 'FiresAPP',
launch: function() {
Ext.widget('group-form');
}
});
Последний раз редактировалось novikov, 17.06.2015 в 10:59.
|
|
17.06.2015, 11:09
|
|
Кандидат Javascript-наук
|
|
Регистрация: 07.06.2010
Сообщений: 146
|
|
novikov,
Спасибо за идею. Буду делать.
|
|
|
|