我已经能够从外部XML文件中创建ExtJS网格。我通常对商店的定义如下:
var store = new Ext.data.Store({
model: 'PersonModel',
proxy: {
type: 'ajax',
url : 'MyXML.xml',
reader: {
type : 'xml',
record: 'Person'
}
}
});
我在其中一个字段中存储了一个XML片段,所以假设我在一个局部变量中存储了它。如何实现从变量/字符串而不是从文件读取存储?谢谢
我开始工作了。诀窍是定义一个内存类型的代理,然后将解析后的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'
}
}
});
当我在代理中丢弃data:doc声明时,它就开始工作了。代理人:{数据:文档type:"内存"等等
EW
//这是我们将在商店中使用的模型
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'
}
]
};
//注意我们如何在阅读器中设置"根"以匹配之上的数据结构
var store = new Ext.data.Store({
autoLoad: true,
model: 'User',
data : data,
proxy: {
type: 'memory',
reader: {
type: 'json',
root: 'users'
}
}
});
参考:http://docs.sencha.com/ext-js/4-0/#/api/Ext.data.proxy.Memory
我认为这样的东西可能会起作用(诚然,我还没有尝试过):
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
您可以使用store.loadData(xmlVar);