我有一个通过http请求填写的组合框。为此,使用带代理的JsonStore,模型定义如下:
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 :(得分:1)
Records[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);
}
});
虽然没有被问到,但我想指出,如果你从success
传递一个failure
标志,那么sencha允许你使用callback
和success
代替{
"success":true,
"data": [{"field_1":1,"field_2":318},
{"field_1":2,"field_2":322}],
"error":{"code":"0","message":null}
}
服务器:
apply plugin: 'cpp'
model {
components {
nativeTestSources(NativeExecutableSpec) {
sources.cpp {
source {
srcDir "testdir"
include "**/*.cpp"
}
}
}
}
}
答案 1 :(得分:1)
在你的方法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
}
}
});