当我使用 Treeview 组件加载商店时
store: 'somestore'
具有以下设置:
Ext.define('App.store.AdminNavigationTree', {
extend: 'Ext.data.TreeStore',
model: 'App.model.AdminNavigationTree',
storeId: 'AdminNavigationTree',
headers: { 'Content-Type': 'application/json' },
proxy: {
type: 'ajax',
url: settings.ApiUrl + '/View/AdminNavigation/?format=json',
reader: {
type: 'json',
root: 'result',
}
},
folderSort: true
});
数据加载正常。
当尝试使用以下商店调用 store.load 以填充表单时,它没有!
Ext.define('App.store.PromotionCompany', {
extend: 'Ext.data.Store',
model: 'App.model.PromotionCompany',
storeId: 'PromotionCompany',
headers: { 'Content-Type': 'application/json' },
proxy: {
type: 'ajax',
url: settings.ApiUrl + '/Model/PromotionCompany/?format=json',
reader: {
type: 'json',
root: 'result',
}
}
});
我正在为 API 使用 ServiceStack 并且这两个 URL 都设置了 [EnableCors]
并且确实 - 当使用以下内容调用 store.load
时:
store.load({
params: { id: pcid },
callback: function (records, options, success) {
//do something
}
});
我可以看到请求进入 API 并返回正确的数据!
有没有人知道 ExtJs 到底在做什么?
最佳答案
根据我对上一个 ExtJs + ServiceStack 项目的记忆,TreeStore 和 Store 需要不同的数据结构。
- 使用 Chrome 开发工具或 Firebug 检查响应对象,可能是解析问题。至少,它会帮助您更接近解决方案。
仔细检查您的 JsonReader 属性(在您的商店中),我被捕获了几次,因为我忘记在其上设置“root”属性。
编辑 1:我查看了我的代码,响应是相似的,唯一不同的是包含了附加信息,例如 leaf: true 等)。我也没有注意到您已经在代码示例中设置了根属性。
关于javascript - 带有 id 的 Extjs store.load 导致 CORS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18471455/