在下面的示例中,当我们单击按钮时,所有表单数据(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);
答案 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();
}