Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.06.2015, 14:03
Аватар для kolka
Кандидат Javascript-наук
Отправить личное сообщение для kolka Посмотреть профиль Найти все сообщения от kolka
 
Регистрация: 07.06.2010
Сообщений: 146

Ext.view.MultiSelector
Всем привет.

Пользовался ли кто этим компонентом - Ext.view.MultiSelector

Опять же разбираясь на примере из kitchensink породил своё.. но есть ошибки с которыми по незнанию опять же не могу справиться..

Мой пример
Проблема:
При выборе справа (нажать на плюсик) выпадаем нужный список.. но как только выбираешь элемент - ошибка в консоли и интерфейс "теряется"..

Кто поможет ?
Ответить с цитированием
  #2 (permalink)  
Старый 16.06.2015, 16:34
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 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.
Ответить с цитированием
  #3 (permalink)  
Старый 16.06.2015, 16:50
Аватар для kolka
Кандидат Javascript-наук
Отправить личное сообщение для kolka Посмотреть профиль Найти все сообщения от kolka
 
Регистрация: 07.06.2010
Сообщений: 146

Вот это да..
novikov,
Большое спасибо за помощь.
Ответить с цитированием
  #4 (permalink)  
Старый 16.06.2015, 18:19
Аватар для kolka
Кандидат Javascript-наук
Отправить личное сообщение для kolka Посмотреть профиль Найти все сообщения от kolka
 
Регистрация: 07.06.2010
Сообщений: 146

novikov,
Можете подсказать, а каким образом значения выбранные в multiselector можно передать на сервер для сохранения ?

Свой пример обновил.. работает..

Последний раз редактировалось kolka, 16.06.2015 в 18:23.
Ответить с цитированием
  #5 (permalink)  
Старый 17.06.2015, 10:56
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 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.
Ответить с цитированием
  #6 (permalink)  
Старый 17.06.2015, 11:09
Аватар для kolka
Кандидат Javascript-наук
Отправить личное сообщение для kolka Посмотреть профиль Найти все сообщения от kolka
 
Регистрация: 07.06.2010
Сообщений: 146

novikov,
Спасибо за идею. Буду делать.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск