ExtJS 4.2.2 - 在根对象上使用子节点属性的XML解析器

时间:2014-11-11 00:45:57

标签: xml parsing extjs

当我嵌套子节点时,我目前在ExtJS 4.2.2中的XML解析方面遇到了问题。

在下面的示例中,我展示了我正在获取的用户具有'类型'属性和工具有' type'属性。 (用户'类型'只是一个字符串,但工具'类型'是一个对象,我不确定这是否与问题有关。)

我的问题是,XML解析器似乎正在拾取' type'映射我的User对象然后混淆时的属性,导致用户输入' type'属性为' null' (我希望它是字符串'普通')。

代码示例:

XML示例:

<user>
    <id>1</id>
    <userName>John Smith</userName>
    <type>Normal</type>
    <tools>
        <tool>
            <id>100</id>
            <name>Drill</name>
            <type>
                <size>5.3</size>
                <model>Brand name</model>
            </type>
        </tool>
    </tools>
</user>

商店示例:

Ext.create('Ext.data.Store', {
    autoLoad: true,
    model: 'User',
    data: xmlData,
    proxy: {
        type: 'memory',
        reader: {
            type: 'xml',
            record: 'user'
        }
    }
});

模型示例:

Ext.define('User', {
    extend: 'Object',
    fields: [
        {name: 'id'},
        {name: 'userName'}
        {name: 'type'}
    ],
    hasMany: {
        model: 'Tool',
        name: 'tools',
        reader: {
            type: 'xml',
            record: 'tool'
    }
});

Ext.define('Tool', {
    extend: 'Object',
    fields: [
        {name: 'id'},
        {name: 'name'}
    ]
});

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

经过深入探索尝试不同的可能解决方案..

我终于找到了实现目标的简单方法!

对于遇到同样问题的其他人,我设法通过添加“映射”来解决这个问题。到我的顶级班级&#39;键入&#39;刚刚附加&#39;&gt;&#39;的字段在物业名称前面。

{name:&#39; type&#39;,mapping:&#39;&gt; type&#39;}

示例:

Ext.define('User', {
    extend: 'Object',
    fields: [
        {name: 'id'},
        {name: 'userName'}
        {name: 'type', mapping: '>type'}
    ],
    hasMany: {
        model: 'Tool',
        name: 'tools',
        reader: {
            type: 'xml',
            record: 'tool'
    }
});

希望这也有助于其他人!

感谢。