从XML字符串而不是文件加载Extjs网格
我已经能够从外部XML文件中创建ExtJS网格。我通常对商店的定义如下:从XML字符串而不是文件加载Extjs网格,xml,extjs,Xml,Extjs,我已经能够从外部XML文件中创建ExtJS网格。我通常对商店的定义如下: var store = new Ext.data.Store({ model: 'PersonModel', proxy: { type: 'ajax', url : 'MyXML.xml', reader: { type : 'xml', record: 'Person' } } })
var store = new Ext.data.Store({
model: 'PersonModel',
proxy: {
type: 'ajax',
url : 'MyXML.xml',
reader: {
type : 'xml',
record: 'Person'
}
}
});
我在其中一个字段中存储了一个XML片段,所以让我们假设它在一个局部变量中。如何实现存储从变量/字符串而不是文件中读取?谢谢。我认为类似的方法可能会奏效(承认我没有尝试过):
var data=“Joe Bob”;
var store=新的Ext.data.store({
模特:“PersonModel”,
数据:数据,
代理:{
键入:“内存”,
读者:{
键入:“xml”,
记录:“人”
}
}
});
您可能还希望在应用商店的选项中添加autoLoad:true
,这样就不必调用store.load()代码>
编辑:
您可能还想考虑将数据更改一点,以便它可以被数组读取器使用://这是我们将在商店中使用的模型。
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'
}
}
});
参考文献:
您可以使用
store.loadData(xmlVar) 我成功了。诀窍是定义一个内存类型代理,然后将一个解析过的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'
}
}
});
var xmlstr=“”+
"" +
“斯坦”+
“C”+
"" +
"" +
“斯坦利”+
“D”+
"" +
"";
var-doc;
if(window.ActiveXObject){//IE
var doc=新的ActiveXObject(“Microsoft.XMLDOM”);
doc.async=“false”;
doc.loadXML(xmlstr);
}else{//Mozilla
var doc=new DOMParser().parseFromString(xmlstr,“text/xml”);
}
var memstore=新的Ext.data.Store({
自动加载:对,
模型:“人”,
资料:doc,,
代理:{
键入:“内存”,
读者:{
键入:“xml”,
记录:“人”
}
}
});
我在代理中删除了data:doc声明后,它就开始工作了。
代理:
{
数据:doc
键入:“内存”
等等
EW按变量/字符串,您指的是数据库或本地存储(阵列)?在网上找到了一些有用的帖子。问题是它们似乎都在v2/3中工作,而代码在v4中不起作用……谢谢,它接近于我要查找的内容,但这是json,而不是xml。看起来MemoryProxy是一种方法,但我需要向其传递一个包含xml文件片段的字符串。您只需将代理更改为xml reader r即可标题:{type:'xml',root:'users'}
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'
}
}
});