从XML字符串而不是文件加载Extjs网格

时间:2011-06-21 18:19:54

标签: xml extjs

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

var store = new Ext.data.Store({
    model: 'PersonModel',
    proxy: {
        type: 'ajax',
        url : 'MyXML.xml',
        reader: {
            type  : 'xml',
            record: 'Person'
        }
    }
});

我有一个存储在其中一个字段中的XML片段,所以我只想说我将它放在一个局部变量中。如何实现存储以从变量/字符串而不是从文件中读取?感谢。

5 个答案:

答案 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);