项目遇到特殊需求:页面上有一个applet,负责取一些客户机上的数据到页面。这些数据格式是xml字符串。
页面上用js读到这些xml串后,需要显示到Ext 的gird中。
问题来了:无论在Ext的例子中还是文档中,Grid的store加载的xml信息都是以xml文件存在的。页面上的只有array或者json格式数据的才被store认可,没有直接加载的xml串或者dom对象的。
后来去extjs官方论坛找到了答案,解决办法就是自己把xml串封装成dom对象,然后用Ext.data.MemoryProxy做代理
摘录如下:
//
load XML as string
var strXML = " <Tags>![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
</Tags>
"
;
var xmlObject;
// load XML string code for IE
if (window.ActiveXObject)
{
var doc = new ActiveXObject( " Microsoft.XMLDOM " );
doc.async = " false " ;
doc.loadXML(strXML);
}
// load XML string code for Mozilla, Firefox, Opera, etc.
else
{
var parser = new DOMParser();
var doc = parser.parseFromString(strXML, " text/xml " );
}
xmlObject = doc.documentElement;
//
var dataStore = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(xmlObject),
reader: new Ext.data.XmlReader({
record: ' Item ' ,
id: ' ItemID '
}, [
' Cat1 ' , ' Cat2 ' , ' Cat3 ' , ' Cat4 '
])
});
// etc. etc.
var strXML = " <Tags>
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
var xmlObject;
// load XML string code for IE
if (window.ActiveXObject)
{
var doc = new ActiveXObject( " Microsoft.XMLDOM " );
doc.async = " false " ;
doc.loadXML(strXML);
}
// load XML string code for Mozilla, Firefox, Opera, etc.
else
{
var parser = new DOMParser();
var doc = parser.parseFromString(strXML, " text/xml " );
}
xmlObject = doc.documentElement;
//
![](https://www.cnblogs.com/Images/dot.gif)
var dataStore = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(xmlObject),
reader: new Ext.data.XmlReader({
record: ' Item ' ,
id: ' ItemID '
}, [
' Cat1 ' , ' Cat2 ' , ' Cat3 ' , ' Cat4 '
])
});
// etc. etc.