从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' } } })

我已经能够从外部XML文件中创建ExtJS网格。我通常对商店的定义如下:

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'
        }
    }
});