我有一个带有ajax代理和json阅读器的ExtJS商店:
Ext.create('Ext.data.Store', {
proxy: {
type: 'ajax',
url: '...',
reader: {
type: 'json',
root: 'data',
totalProperty: 'totalCount',
messageProperty: 'message',
successProperty: 'success'
},
...
这是我从服务器获得的:
data: [...]
message: "I want to read this string after the store is loaded"
success: true
totalCount: x
现在我想在加载商店时访问'消息' - 我从哪里获得它?我看了很多,但我找不到一个可以挂钩的地方?代理中唯一的监听器是异常,这对我没有帮助。
答案 0 :(得分:5)
使用商店load
活动:
Ext.create('Ext.data.Store', {
listeners: {
'load': function(store, records, successful, operation) {
alert(operation.resultSet.message);
}
},
proxy: {
// ...
<强>更新强>
看来加载事件的文档是错误的。正确的参数列表是(store, records, successful)
(无操作参数)。因此,上述解决方案无效。
但是有读者的rawData
属性可以提供帮助:
Ext.create('Ext.data.Store', {
listeners: {
'load': function(store, records, successful) {
alert(store.getProxy().getReader().rawData.message);
}
},
proxy: {
// ...
答案 1 :(得分:0)
我的回答适用于ExtJs 4.1.x.我花了一些时间阅读代码,似乎有一种方法是在商店beforeload事件中提供回调,而不是处理load事件。回调传递的操作对象将包含原始请求参数,如果成功,它将包含响应对象和resultSet属性下的数据(已解析)。
答案 2 :(得分:0)
在其他情况下:
myStore.load({
callback : function(object, response, success) {
// on error response: success = false
if(!success) {
// i don't remember de correct path to get "message" or "responseText"
console.log(response.response.responseText);
} else {
...
}
});
氰!
答案 3 :(得分:0)
虽然我手动加载并且不在此处使用事件,但我以下列方式收到消息:
var initData = Ext.create('My.data.SomeAjaxStore');
initData.load(function(records, operation, success) {
if (!success || operation.hasException()) {
// Here is your message from server
// In case of HTTP error you get:
// {
// status: 404,
// statusText: "Not Found"
// }
var error = operation.getError();
Ext.log({msg:[Ext.getClassName(me), ": Command failure: ", error].join(""), level:"error"});
}