CheckboxGroup с данными из своей таблицы
        Добры день.
Подскажите, как правильно сделать checkboxgroup с данными их своей таблицы? Пока я научился делать свои xtype, оформленный в виде select, а такой вид не знаю, как сделать. Прошу помощи у специалистов))
    
    
                                                                                
            Подскажите, как правильно сделать checkboxgroup с данными их своей таблицы? Пока я научился делать свои xtype, оформленный в виде select, а такой вид не знаю, как сделать. Прошу помощи у специалистов))
Комментарии: 4
                Добрый день. Прошу помощи у сообщества, как решить мою проблему. Я делаю так:
В файле combo.js регистрирую свой кастомный comboboxgroup
                    В файле combo.js регистрирую свой кастомный comboboxgroup
MyComp.combo.CheckboxGroup = function (config) {
    config = config || {};
    Ext.applyIf(config, {
        items: [{
            boxLabel: 'hidden',
            name: config.hiddenName + '[]',
            inputValue: '',
            itemId: '',
            hidden: true,
            checked: true
        }],
        msgTarget: 'under',
        listeners: {
            afterrender: {fn: this.onAfterRender, scope: this}
        }
    });
    MyComp.combo.CheckboxGroup.superclass.constructor.call(this, config);
};
Ext.extend(MyComp.combo.CheckboxGroup, Ext.form.CheckboxGroup, {
    onAfterRender: function () {
        if (this.url) {
            this.loadData();
        } else {
            this.setup();
        }
    },
    loadData: function () {
        MODx.Ajax.request({
            url: this.url,
            params: this.baseParams,
            listeners: {
                success: {
                    fn: function (r) {
                        this.setup(r.results);
                    },
                    scope: this
                }
            }
        });
    },
    setup: function (data) {
        if (data) {
            Ext.each(data || [], function (item) {
                this.addItem({
                    boxLabel: item[this.displayField],
                    name: this.hiddenName + '[]',
                    inputValue: item[this.valueField],
                    checked: this.checkValue(item[this.valueField])
                });
            }, this);
        } else {
            Ext.each(this.items.items || [], function (item) {
                if (!item.hidden) {
                    item.setValue(this.checkValue(item.inputValue));
                }
            }, this);
            this.addItem({
                boxLabel: 'hidden',
                name: this.hiddenName + '[]',
                inputValue: '',
                itemId: '',
                hidden: true,
                checked: true
            });
        }
    },
    addItem: function (data) {
        var checkbox = new Ext.form.Checkbox(data),
            col = this.panel.items.get(this.items.getCount() % this.panel.items.getCount());
        this.items.add(checkbox);
        col.add(checkbox);
    },
    checkValue: function (val) {
        var checked = false;
        Ext.each(this.values || [], function (item) {
            if (item.value == val) {
                checked = true;
                return false;
            }
        });
        return checked;
    },
    validateValue: function (b) {
        var valid = false;
        if (this.allowBlank) return true;
        Ext.each(this.items.items || [], function (item) {
            if (!item.hidden && item.getValue()) {
                valid = true;
                return false;
            }
        }, this);
        if (!valid) this.markInvalid(this.blankText);
        return valid;
    }
});
Ext.reg('myComp-pricegroup', MyComp.combo.CheckboxGroup);В файле окна, где нужно вывести группу чекбоксов, добавляю такой вызов:{
	xtype: 'mycomp-pr',
	fieldLabel: _('mycomp_pr_name'),
	description: '<b>[[*name]]</b><br />'+_('mycomp_pr_name_help'),
	columns: 1,
	hiddenName: 'name',
	displayField: 'name',
	valueField: 'id',
	url: MyComp.config.connector_url,
	baseParams:{
		action: 'mgr/item/pr/getpr'
	},
	allowBlank: true,
}В результате я вижу только заголовок группы чекбоксов. В тоже время судя по консоли, данные с процессора принимаются и приходят, но не отображаются. Может нужно шаблон отображения вывести или еще что? Я в замешательстве…            
                Не надеюсь конечно на помощь уже, сообществу важнее обсуждать новый логотип, это же сильно влияет на удобство работу с MODX, но все же, может все-таки кто-то снизойдет до обычных пользователей:
Подскажите, почему у меня в этом коде данные есть:
                    Подскажите, почему у меня в этом коде данные есть:
loadData: function () {
        MODx.Ajax.request({
            url: this.url,
            params: this.baseParams,
            listeners: {
                success: {
                    fn: function (r) {
                        console.log(r); // Здесь получаю правильные данные
                        this.setup(r.results);
                    },
                    scope: this
                }
            }
        });как мне их передать в окно чтобы создать чекбоксы…            
                Сейчас, с помощью пользователя Prihod(за что ему огромное спасибо) я смог вывести сами чекбоксы. Но у меня вот какая проблема осталась:
Если я захожу в первый раз в редактирование, то все отображается нормально: prnt.sc/ixidgm, если же я закрою окно, и полазию по вкладками или просто заново его открою — то там одни заголовки: prnt.sc/ixidm3
С чем это может быть связано.
Также пока не очень получатся отметить те чекбоксы, которые ранее были отмечены (на скрине я принудительно все отметил)
Вот мой код:
                    Если я захожу в первый раз в редактирование, то все отображается нормально: prnt.sc/ixidgm, если же я закрою окно, и полазию по вкладками или просто заново его открою — то там одни заголовки: prnt.sc/ixidm3
С чем это может быть связано.
Также пока не очень получатся отметить те чекбоксы, которые ранее были отмечены (на скрине я принудительно все отметил)
Вот мой код:
msFabrics.combo.CheckboxGroup = function (config) {
    
    config = config || {};
    Ext.applyIf(config, {
        items: [{
            boxLabel: 'hidden',
            name: config.hiddenName + '[]',
            inputValue: '',
            itemId: '',
            hidden: true,
            checked: true
        }],
        msgTarget: 'under',
        listeners: {
            afterrender: {fn: this.onAfterRender, scope: this}
        }
        
    });
    msFabrics.combo.CheckboxGroup.superclass.constructor.call(this, config);
};
Ext.extend(msFabrics.combo.CheckboxGroup, Ext.form.CheckboxGroup, {
    onAfterRender: function () {
        if (this.url) {
            this.loadData();
        } else {
            this.setup();
        }
    },
    loadData: function () {
        MODx.Ajax.request({
            url: this.url,
            params: this.baseParams,
            listeners: {
                success: {
                    fn: function (r) {;
                        this.setup(r.results);
                    },
                    scope: this
                }
            }
        });
    },
    setup: function (data) {
        console.log(data);
        if (data) {
            Ext.each(data || [], function (item) {
                
                this.addItem({
                    boxLabel: item[this.displayField],
                    name: this.hiddenName + '[]',
                    inputValue: item[this.valueField],
                    checked: this.checkValue(item[this.valueField])
                });
            }, this);
            
        } else {
            Ext.each(this.items.items || [], function (item) {
                if (!item.hidden) {
                    item.setValue(this.checkValue(item.inputValue));
                }
            }, this);
            this.addItem({
                boxLabel: 'hidden',
                name: this.hiddenName + '[]',
                inputValue: '',
                itemId: '',
                hidden: true,
                checked: true
            });
        }
    },
    addItem: function (data) {
        var group = Ext.getCmp('msfabrics-pricegroup');
        var checkbox = new Ext.form.Checkbox(data),
            col = this.panel.items.get(this.items.getCount() % this.panel.items.getCount());
        this.items.add(checkbox);
        col.add(checkbox);
        group.panel.doLayout();
    },
    
    checkValue: function (val) {
        
        var checked = false;
        Ext.each(val || [], function (item) {
            //console.log(item);
            if (item == val) {
                checked = true;
                return false;
            }
        });
        
        return checked;
    },
    
    validateValue: function (b) {
        var valid = false;
        if (this.allowBlank) return true;
        Ext.each(this.items.items || [], function (item) {
            if (!item.hidden && item.getValue()) {
                valid = true;
                return false;
            }
        }, this);
        if (!valid) this.markInvalid(this.blankText);
        console.log(valid);
        return valid;
    },
});
Ext.reg('msfabrics-pricegroup', msFabrics.combo.CheckboxGroup);и в окне вызова:{
            xtype: 'msfabrics-pricegroup',
            fieldLabel: _('msfabrics_pricegroup_name'),
            description: '<b>[[*name]]</b><br />'+_('msfabrics_pricegroup_name_help'),
            columns: 2,
            name: 'pricegroup_id',
            hiddenName: 'pricegroup_id',
            displayField: 'name',
            valueField: 'id',
//	    values: config.record.pricegroup_id // Здесь у меня не получается получить отмеченные чекбоксы
            url: msFabrics.config.connector_url,
            baseParams:{
                action: 'mgr/item/pricegroup/getpricegroup'
            }            
                остался один момент: Если я захожу в первый раз в редактирование, то все отображается нормально: prnt.sc/ixidgm, если же я закрою окно, и полазию по вкладками или просто заново его открою — то там одни заголовки: prnt.sc/ixidm3
Как исправить, кто подскажет?
                    Как исправить, кто подскажет?
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.