Extjs 4 updateRecord错误

时间:2012-01-19 10:01:51

标签: extjs extjs4 store

(如果帖子很长,请提前抱歉,我只是添加了问题所涉及的所有代码,然后我认为可能更容易得到答案)

您好,我在尝试更新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 :(得分:0)

  

当我将模型发送给我时,我不知道它是否有问题   一般网格中的窗口

我相信它是。您发送的不是空实例(应该发送),而是发送类的原型。尝试发送:

record : new this.store.model()