将值保存到数据库 - 逻辑错误

时间:2012-07-03 06:34:36

标签: extjs extjs4 extjs-mvc extjs4.1

在下面的示例中,当我们单击按钮时,所有表单数据(KEY-VALUE)都将传递给php文件以保存在数据库中。抓取KEY-VALUE是由var form = this.up('form').getForm();声明完成的。

更新3

Ext.define ('Mycomp.model.MyClass',{
    extend: 'Ext.data.Model',

    fields:['textfieldone']

});

=============================================== =========================

更新2

当用户点击按钮时,我会显示包含一个文本字段和一个按钮的视图(如下面的代码所示)。用户将输入一些值并单击按钮,用户在文本字段中输入的值应保存在DB中(Store具有指向PHP代码路径的链接)

CONTROLLER

Ext.define('Mycomp.controller.MyClass',{
    extend: 'Ext.app.Controller',

    stores:['MyClass'],
    models:['MyClass'],
    views:['MyClassView'],
    init: function(){
        this.control({          
            'myclassview button[action=save]': {
                click: this.myMethod
            }
        });         
        },
        myMethod: function(button,record) {
               var win    = button.up('window'),
               form   = win.down('form'),
               record = form.getForm().getRecord(),
               values = form.getForm().getValues();
               console.log (values);
               console.log (record);
               record.getRecord().set(values);         
           win.close();
           this.this.getMyClassStore().sync(); 
    }
});

查看

Ext.define('Mycomp.view.user.MyClassView', {
    extend: 'Ext.window.Window',
    alias: 'widget.myclassview',
    initComponent: function() {
        this.items = [
            {
                xtype: 'form',
                items: [
                    {
                        xtype: 'textfield',
                        name : 'textfieldone',
                        fieldLabel: 'Contact Person Name'
                    }
                ]
            }
        ];
        this.buttons = [
                        {
                            text: 'Save',
                            name:'save',
                            action: 'save'
                        }
                    ];
        this.callParent(arguments);
    }
});

STORE

Ext.define('Mycomp.store.Myclass',{
    extend:'Ext.data.Store',
    model:'App.model.Myclass',

    proxy: {
        actionMethods : {
            create : 'POST'
        },
        type: 'ajax',
        url : '/savetodb.php'

    }

});

=============================================== ================================

更新1

 ....  this.buttons = [
                            {
                                text: 'Save',

                                action: 'save'
                            }, ...

STORE

Ext.define('Mycomp.store.Myclass',{
    extend:'Ext.data.Store',
    model:'App.model.Myclass',

    proxy: {
        actionMethods : {
            create : 'POST'
        },
        type: 'ajax',
        url : '/savetodb.php'

    }

});

CONTAROLLER

this.control({

            'mycalssform button[action=save]': {
                click: this.myMethod
            }
        });


        },

        myMethod: function(button, record) {

               var win    = button.up('window'),
               form   = win.down('form'),
               record = form.getRecord(),
               values = form.getValues();
               console.log (record);
      console.log (values );

           record.set(values);
           win.close();
           this.this.getmyClassStore().sync(); 

FIREBUG OUT PUT>>它说RECORD没有定义。这是为什么?

undefined

Object { textfileldone="hello", textfileldtwo="bever", more...}

record is undefined
[Break On This Error]   

record.set(values);

1 个答案:

答案 0 :(得分:2)

为了让表单“绑定”到记录中,您需要创建一个新的模型实例并调用form.loadRecord() - 只有在这样做之后,您才能form.getRecord()工作。< / p>

或者(如果您只使用新记录形式,这将是合适的),您可以在保存时创建一个新的模型记录并设置其值。

这些方面的内容将创建一个新的模型记录:

var iStore = this.getmyClassStore();
var iModel = iStore.model; 
var iNewRecord = iModel.create();

然后您可以执行:

iValues = form.getValues();
iNewRecord.set( iValues );

然后你需要将新记录添加到商店:

iStore.add( iNewRecord )

所以你的代码应该是这样的:

    myMethod: function(button, record) {

           var win    = button.up('window'),
               form   = win.down('form'), 
               values = form.getValues(),
               store = this.this.getmyClassStore(),
               model = store.model,
               record = model.create();


               record.set( values );
               store.add( record );
               win.close();
               store.sync(); 
    }