我使用Model.save
来保存ExtJs表单中的数据。有时,服务器以下列格式返回操作状态:
{"success": false, "error": {"name": "Invalid Name"}}
以下代码将数据从表单发送到服务器:
var model = formPanel.getRecord(); model.save({ callback: function(record, operation, success) { // operation.response is null, // and success === true // how to read server response here? } })
服务器响应被视为成功,因为HTTP状态为200.所以我必须读取服务器响应以检查操作状态。但operation.response
函数null
为callback
。
这是我的模特:
Ext.define('My.Model', { extend: 'Ext.data.Model', idProperty: 'id', fields: [ {name: 'id', type: 'auto'}, {name: 'name', type: 'auto'} ], proxy: { type: 'rest', url: 'api/v1/models', appendId: true, reader: { type: 'json', }, writer: { type: 'json' } } });
问题:如何在Model.save
致电后访问服务器响应?
更通用的问题:使用Model.load
或Model.save
填充/保存ExtJs表单在语义上是否正确?
我正在使用ExJs 5.0.1.1255。
答案 0 :(得分:2)
我为此创建了一些简单的测试代码:
var Clazz = Ext.define('MyModel', {
extend: 'Ext.data.Model',
proxy: {
type: 'rest',
url: 'api/v1/models'
}
});
var instance = Ext.create('MyModel', {
name: 'MyName'
});
instance.save({
callback: function(record, operation) {
}
});
服务器响应:
{
success: true,
something: 'else'
}
你可以在这里看到这个:https://fiddle.sencha.com/#fiddle/fhi
使用此代码,回调具有record
参数,record.data
包含与服务器响应合并的原始记录。此外,您可以operation.getResponse()
(而不仅仅是operation.response
)来完全访问服务器的响应。
关于加载vs保存的问题,如果你使用视图模型并以这种方式绑定模型,那么它就变得没有实际意义了,因为你的表单应该始终反映模型的状态。
答案 1 :(得分:1)
使用model.save()
和Model.load()
绝对是正确的做法。
除了提供自定义回调外,您还应调查配置custom proxy。在自定义代理中,您可以提供自己的extractResponseData
方法实现。这样您就可以集中检查服务器响应。