элемент управления контейнером как редактор сетки не обновляет значения

Итак, у меня есть сетка с двумя столбцами, в первом есть только текст, во втором должен быть настраиваемый элемент управления (с флажком и полем со списком).

Проверьте скрин:

Вот ссылка на скриншот: Screenie

Проблема:

Когда я нажимаю «Обновить», чтобы обновить строку. Первый столбец обновляется, а второй — нет.

Я наивно добавил getValue() в свой пользовательский элемент управления, но не повезло!! (Примечание: я использую плагин для редактирования строк)

Вот мой код:

Ext.define('MainGrid', {
    extend: 'Ext.grid.Panel',
    //defs for all the toolbars and buttons
    plugins: [rowEditing],
    columns: [
                {
                    xtype: 'rownumberer'
                },
                {
                    xtype: 'gridcolumn',
                    text: 'Column Titles',
                    dataIndex: 'ColumnTitle',
                    editor: {
                        xtype: 'textfield',
                    }
                },
                {
                    xtype: 'gridcolumn',
                    sortable: false,
                    align: 'center',
                    dataIndex: 'IssueCondition',
                    editor: {
                        xtype: 'reportpopulation'
                    }]
});

Здесь reportpopulation — это настраиваемый элемент управления. Вот код для него:

Ext.define('SelectPopulation', {
    extend: 'Ext.container.Container',
    itemId: 'ctrSelectpopulation',
    alias: 'widget.reportpopulation',
    layout: {
        type: 'hbox'
    },
    initComponent: function () {
      //code to add combo box and checkbox snipped
      ....
    },
    getValue: function () {
        //This doesn't work! 
        return "Booo";
    }
});

Таким образом, нажатие кнопки «Обновить» не:

  • Есть что-то, что мне не хватает?
  • Должен ли я наследовать от FieldBase? Могу ли я использовать несколько элементов управления и создать что-то вроде экрана с помощью FieldBase?

person pradeep    schedule 10.12.2012    source источник
comment
первый столбец не привязан к какому-либо полю (dataIndex) и работает, второй связан с IssueCondition и не работает... ммм... не могли бы вы поделиться своей моделью (или сохранить, если модели нет)   -  person lontivero    schedule 10.12.2012
comment
@lontivero Это была просто опечатка, когда я минимизировал код, который размещал здесь. Я обновил вопрос. Любые предположения, почему второй столбец столбца не показывает никаких данных? Это потому, что это элемент управления контейнером?   -  person pradeep    schedule 11.12.2012
comment
Во втором столбце не отображаются данные, потому что он не знает, как отображать сложное значение этого поля, проверьте мой ответ.   -  person VoidMain    schedule 07.01.2013
comment
Если ответ решил вашу проблему, пожалуйста, примите его, спасибо.   -  person VoidMain    schedule 19.07.2013


Ответы (1)


Это работает, даже ваш getValue() работал, проблема в том, что вы использовали значение пользовательского типа в этом столбце сетки (IssueCondition) и не указали для него какой-либо рендерер, попробуйте что-то вроде этого:

Ext.define('MainGrid', {
extend: 'Ext.grid.Panel',
height: 300,
plugins: [Ext.create('Ext.grid.plugin.RowEditing', {
    clicksToEdit: 1
})],
columns: [{
    xtype: 'rownumberer'
}, {
    xtype: 'gridcolumn',
    text: 'Column Titles',
    dataIndex: 'ColumnTitle',
    editor: {
        xtype: 'textfield'
    }
}, {
    xtype: 'gridcolumn',
    sortable: false,
    text: "Issue Condition",
    align: 'center',
    dataIndex: 'IssueCondition',
    width: 200,
    editor: {
        xtype: 'reportpopulation'
    },
    renderer: function (v, attr, rec) {
        console.info(arguments);
        return 'cb: ' + rec.data.IssueCondition.cb + ' combo: ' + rec.data.IssueCondition.combo;
    }
}],
store: Ext.create("Ext.data.Store", {
    fields: ["ColumnTitle", "IssueCondition"],
    proxy: {
        type: "memory",
        reader: {
            type: "json"
        }
    }
})
});

Ext.define('SelectPopulation', {
extend: 'Ext.container.Container',
itemId: 'ctrSelectpopulation',
alias: 'widget.reportpopulation',
layout: {
    type: 'hbox'
},
initComponent: function () {
    Ext.apply(this, {
        items: [{
            xtype: "checkbox"
        }, {
            xtype: "combobox",
            allowBlank: false,
            store: [
                [0, 'Zero'],
                [1, 'One'],
                [2, 'Two']
            ]
        }]
    });
    this.callParent(arguments);
},
getValue: function () {
    return {
        cb: this.child('checkbox').getValue(),
        combo: this.child('combobox').getValue()
    };
}
});

Имейте в виду, что это всего лишь пример.

Проверьте скрипт здесь

Надеюсь это поможет.

person VoidMain    schedule 07.01.2013