Sencha ExtJs:修改存储/模型以部分处理记录
我有一个通过http请求填写的组合框。为此,将使用带有代理的JsonStore,模型定义如下:Sencha ExtJs:修改存储/模型以部分处理记录,extjs,model,proxy,callback,store,Extjs,Model,Proxy,Callback,Store,我有一个通过http请求填写的组合框。为此,将使用带有代理的JsonStore,模型定义如下: Ext.define('TreeModel', { extend: 'Ext.data.Model', fields: [ 'field_1', 'field_2' ] }); 如果我在读卡器中使用了rootProperty:“data”,那么这对以下响应非常有效: { "data":[{"field_1":1,"field_2":31
Ext.define('TreeModel', {
extend: 'Ext.data.Model',
fields: [
'field_1',
'field_2'
]
});
如果我在读卡器中使用了rootProperty:“data”
,那么这对以下响应非常有效:
{
"data":[{"field_1":1,"field_2":318},
{"field_1":2,"field_2":322}]
}
现在,我将通过添加错误描述来添加一些数据库错误处理,如:
{
"data": [{"field_1":1,"field_2":318},
{"field_1":2,"field_2":322}],
"error":{"code":"0","message":null}
}
,所以我可以这样做:
TreeStore.load({
callback: function(records, operation, success) {
App.checkServerReply(records[0].data.error);
}
});
是否有任何方法可以修改模型或存储或其他内容,以便能够以显示的方式获得错误描述,并继续从数据数组填充组合框?在不修改响应格式的情况下获得解决方案的任何其他想法?
记录[0]
不能包含您的结果,因为您没有将其作为第一个结果记录的一部分发送。事实上,您可以将其作为元数据发送,但是没有定义良好且有文档记录的函数来访问传输的元数据(尽管我想每个人都会在某个时候发送它)
在ExtJS 4.2.2中,我使用以下内容:
store.load({
callback: function(records, operation, success) {
var rawData = store.getProxy().getReader().rawData;
//Ext.MessageBox.alert(rawData.Caption, rawData.Message);
App.checkServerReply(rawData.error);
}
});
虽然没有询问,但我想指出,如果您从服务器发送成功
标志,sencha允许您使用成功
和失败
,而不是回调
:
{
"success":true,
"data": [{"field_1":1,"field_2":318},
{"field_1":2,"field_2":322}],
"error":{"code":"0","message":null}
}
在您的方法
load
中,您实际上可以执行以下操作:
TreeStore.load({
callback: function (records, operation, success) {
var data = Ext.JSON.decode(operation._response.responseText);
if (!Ext.isEmpty(data.error)) {
var error = data.error;
//do your stuff with error.code and error.message
}
}
});
您不能为此使用
metachange
事件吗?当JSON中存在元数据对象时,将触发什么?唉,出于某些原因,不希望更改JSON的格式。但是谢谢你的建议——这肯定是我不知道的另一件有用的事情!非常感谢-这正是我需要的!谢谢你!您和PawełGłowacz对单个问题的两个不同答案非常棒,并向我展示了ExtJs中还有很多东西还没有学会。希望我能将两者都标记为解决方案,但遗憾的是,我不得不通过计时来选择第一个。PS是store.getProxy().getReader().rawData
关于竞争条件的安全性?而callback
是最常用的方法,因为现在不可能编辑消息格式,但感谢您提供的信息!