我已经能够从外部XML文件中创建ExtJS网格。我通常按如下方式定义商店:
var store = new Ext.data.Store({
model: 'PersonModel',
proxy: {
type: 'ajax',
url : 'MyXML.xml',
reader: {
type : 'xml',
record: 'Person'
}
}
});
我有一个存储在其中一个字段中的XML片段,所以我只想说我将它放在一个局部变量中。如何实现存储以从变量/字符串而不是从文件中读取?感谢。
答案 0 :(得分:4)
我得到了它的工作。诀窍是定义一个内存类型代理,然后将解析的xml对象传递给它。
var xmlstr = "<personRecord>" +
"<Person>" +
"<firstName>Stan</firstName>" +
"<lastName>C</lastName>" +
"</Person>" +
"<Person>" +
"<firstName>Stanley</firstName>" +
"<lastName>D</lastName>" +
"</Person>" +
"</personRecord>";
var doc;
if (window.ActiveXObject) { //IE
var doc = new ActiveXObject("Microsoft.XMLDOM");
doc.async = "false";
doc.loadXML(xmlstr);
} else { //Mozilla
var doc = new DOMParser().parseFromString(xmlstr, "text/xml");
}
var memstore = new Ext.data.Store({
autoLoad: true,
model: 'Person',
data : doc,
proxy: {
type: 'memory',
reader: {
type: 'xml',
record: 'Person'
}
}
});
答案 1 :(得分:2)
当我删除代理中的数据:doc声明时,我得到了它的工作。 代理: { 数据:doc 类型:'记忆' 等等
EW
答案 2 :(得分:0)
我认为这样的事情可能会奏效(诚然,我没有尝试过):
var data = "<user><name>Joe Bob</name></user>";
var store = new Ext.data.Store({
model: 'PersonModel',
data: data,
proxy: {
type: 'memory',
reader: {
type : 'xml',
record: 'Person'
}
}
});
您可能还想在商店的选项中添加autoLoad: true
,这样您就不必致电store.load();
编辑: 您可能还需要考虑更改数据,以便数组读取器可以使用它:http://docs.sencha.com/ext-js/4-0/#/api/Ext.data.reader.Array
答案 3 :(得分:0)
//这是我们将在商店中使用的模型
Ext.define('User', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'name', type: 'string'},
{name: 'phone', type: 'string', mapping: 'phoneNumber'}
]
});
//此数据不符合我们的模型字段 - 电话字段称为phoneNumber
var data = {
users: [
{
id: 1,
name: 'Ed Spencer',
phoneNumber: '555 1234'
},
{
id: 2,
name: 'Abe Elias',
phoneNumber: '666 1234'
}
]
};
//注意我们如何在阅读器中设置'root'以匹配上面的数据结构
var store = new Ext.data.Store({
autoLoad: true,
model: 'User',
data : data,
proxy: {
type: 'memory',
reader: {
type: 'json',
root: 'users'
}
}
});
Refrence: http://docs.sencha.com/ext-js/4-0/#/api/Ext.data.proxy.Memory
答案 4 :(得分:0)
您可以使用本地变量加载商店 store.loadData(xmlVar);