Extjs 4 updateRecord error - PullRequest
       4

Extjs 4 updateRecord error

0 голосов
/ 19 января 2012

(заранее извините, если сообщение длинное, я просто добавляю весь код, связанный с проблемой, тогда я думаю, что будет проще получить ответ)

Здравствуйте, я сталкиваюсь с проблемой, когда пытаюсь обновить магазин в extjs 4.

Чтобы сделать резервную копию, я разрабатываю общую сетку, куда вы можете отправлять нужные столбцы, а такжеполя в окне, чтобы добавить новые строки в сетку, то это общая сетка :

Ext.define('masterDataGridControls', {
        extend : 'Ext.grid.Panel',

        id : 'panelWin',
        windowItems : null,
        addWin : null,

        initComponent : function() {
            var me = this;

            Ext.applyIf(me, {
                        dockedItems : [{
                            xtype : 'toolbar',
                            dock : 'top',
                            items : [{
                                        xtype : 'button',
                                        id : 'btn_delete',
                                        iconCls : 'deleteIcon',
                                        tooltip : 'Delete row or group',
                                        handler : function() {
                                            var selection = me.getView()
                                                    .getSelectionModel()
                                                    .getSelection()[0];
                                            if (selection) {
                                                store.remove(selection);
                                            }
                                        }
                                    }, {
                                        xtype : 'button',
                                        id : 'btn_add',
                                        iconCls : 'addIcon',
                                        tooltip : 'Add row or group',
                                        handler : me.addToList
                                    }]
                        }]
                    });

            me.callParent(arguments);
        },

        getAddWindow : function() {
            if (!this.addWin) {
                this.addWin = new windowPop({
                            formItems : this.windowItems,
                            idParent : this.config.id,
                            record : this.store.model.prototype
                        });
            }
            return this.addWin;
        },

        addToList : function() {
            var addWindow = this.findParentByType().findParentByType()
                    .getAddWindow();;
            addWindow.show();
        }
    });

И у меня есть класс windowPop , который является однимкто получает поля, отображает их и сохраняет данные:

Ext.define("windowPop", {
extend : "Ext.window.Window",
formPanel : null,
formItems : null,
record : null,
idParent : null,

initComponent : function() {
    var me = this;

    me.formPanel = new Ext.form.Panel({
                items : this.formItems,
                layout: 'anchor'
            });

    Ext.applyIf(me, {
                resizable : false,
                closable : false,
                width : 300,
                minWidth : 300,
                minHeight : 200,
                y : 150,
                layout : 'fit',
                plain : true,
                modal : true,
                items : [me.formPanel],
                buttons : [{
                            text : "i_Save",
                            handler : function() {
                                console.info(me.record);
                                me.formPanel.getForm().updateRecord(me.record);
                                Ext.getCmp(me.idParent).fireEvent("winSave",me.record);
                                me.formPanel.getForm().reset();
                                me.hide();
                            }
                        }, {
                            text : 'i_Cancel',
                            handler : function() {
                             me.formPanel.getForm().reset();
                                me.hide();
                            }
                        }]
            });
    me.callParent(arguments);
}
});

И у меня есть конкретная сетка , где я определяю модель data.model и на данный момент я использую фиксированныйсохранить, но позже будет заменен на тот, который я получаю с сервера:

Ext.define('userKeys', {
        extend : 'Ext.data.Model',
        fields : [{
                    name : 'text',
                    type : 'string'
                }, {
                    name : 'description',
                    type : 'string'
                }, {
                    name : 'group',
                    type : 'string'
                }]
    });

var store = Ext.create('Ext.data.Store', {
        model: 'userKeys',
        data : [{
                    text : "que mamera",
                    description : "asdfasdf",
                    group : 'homework'
                }, {
                    text : "book report",
                    description : 'hola',
                    group : 'homework'
                }, {
                    text : "alegebra",
                    description : "haha",
                    group : 'homework'
                }, {
                    text : "buy lottery tickets",
                    description : "kajsdf",
                    group : 'homework'
                }]

    });


Ext.define('ConfigInterfacesUserKeys', {
        extend : 'masterDataGridControls',

        initComponent : function() {
            var me = this;

            me.columns = [{
                        id : 'cl_input',
                        header : 'i_Text',
                        dataIndex : 'text',
                        width : 220
                    }, {
                        header : 'i_Description',
                        dataIndex : 'description',
                        width : 130
                    }, {
                        header : 'i_group',
                        dataIndex : 'group',
                        width : 130
                    }];

            me.windowItems = [{
                        xtype : 'textfield',
                        id : 'txt_sendTime',
                        fieldLabel : 'text',
                        margin : '5 0 0 5',
                        style : 'font-weight:bold',
                        labelWidth : 120,
                        name : 'text'
                    }, {
                        xtype : 'textfield',
                        id : 'txt_waitTime',
                        fieldLabel : 'description',
                        margin : '5 0 0 5',
                        style : 'font-weight:bold',
                        labelWidth : 120,
                        name : 'description'
                    }, {
                        xtype : 'textfield',
                        id : 'txt_group',
                        fieldLabel : 'group',
                        margin : '5 0 0 5',
                        style : 'font-weight:bold',
                        labelWidth : 120,
                        name : 'group'
                    }];

            me.store = store;

            me.callParent(arguments);
        }
    })

Проблема

Когда я пытаюсь сохранить поля, как вы видитев классе windowPop я делаю это:

me.formPanel.getForm().updateRecord(me.record);

Но я получаю следующую ошибку:

this[this.persistenceProperty] is undefined

Я выследил тОшибка и я обнаружил, что все запускаются, когда в функции updateRecord пытаются установить объект в хранилище:

updateRecord: function(record) {
    var fields = record.fields,
    values = this.getFieldValues(),
    name,
    obj = {};
    fields.each(function(f) {
        name = f.name;
        if (name in values) {
            obj[name] = values[name];
        }
    });
    record.beginEdit();
    **record.set(obj);**
    record.endEdit();
    return this;
} 

Я не знаю, если что-то не так, когда я отправить модель в окно из общей сетки , я отправил это так:

record : this.store.model.prototype

Тогда я не уверен, еслиэто потому, что модель, которую я посылаю, не очень хорошая форма.

Я искал в интернете, но не могу найти правильный ответ, тогда будет очень полезно, если вы поможете мне правильно.

Спасибо

1 Ответ

0 голосов
/ 19 января 2012

Я не знаю, если что-то не так, когда я посылаю модель в окно из общей сетки

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

record : new this.store.model()
...