0

我有以下 XML 结构,我想根据Tab、Topic、SubTopic 和 Screen动态获取 Fields 标记值;这可能吗?请让我知道适当的解决方案。

XML结构:

<?xml version="1.0" encoding="utf-8"?>
<Settings>
<ABC TYPE="Tab">
<Trans TYPE="Topic">
  <Rpt TYPE="SubTopic">
    <File TYPE="Screen">
      <Fields>
        <Tin>10</Tin>
        <Pin>8</Pin>
      </Fields>
    </File>
  </Rpt>
</Trans>
</ABC>
<XYZ TYPE="Tab">
<Trans TYPE="Topic">
  <Rpt TYPE="SubTopic">
    <File TYPE="Screen">
      <Fields>
        <Tin>10</Tin>
        <Pin>8</Pin>
      </Fields>
    </File>
  </Rpt>
</Trans>
  </XYZ>
 </Settings>

模型结构:

Ext.define('MyApp.model.ScreenValidation', {
    extend: 'Ext.data.Model',

    config: {
        fields: [
            {
                name: 'Tin',
                type: 'string'
            },
            {
                name: 'Pin',
                type: 'string'
            }
        ]
    }
});

XMLStore 结构器:

    Ext.define('MyApp.store.ScreenValidation', {
    extend: 'Ext.data.Store',

    requires: [
        'MyApp.model.ScreenValidation'
    ],

    config: {
        autoLoad: true,
        model: 'MyApp.model.ScreenValidation',
        storeId: 'ScreenValidation',
        proxy: {
            type: 'ajax',
            url: 'ScreenValidation.xml',
            reader: {
                type: 'xml',
                record: 'Fields'
            }
        }
    }
});

任何帮助表示赞赏!

4

1 回答 1

0

如果您有权修改 xml 结构,我建议您这样做。

<?xml version="1.0" encoding="utf-8"?>
<Settings>
  <Setting>
    <type>Tab</type>
    <transType>Topic</transType>
    <rptType>SubTopic</rptType>
    <fileType>Screen</fileType>
    <Fields>
      <Tin>10</Tin>
      <Pin>8</Pin>
      </Fields>
    </File>
  </Setting>

  ....ETC
</Settings

如果您无权访问 api,以便您可以更改格式,我认为您将被卡住:

1:使用标准 ajax 请求获取 xml 响应,然后手动解析 xml 结果或使用库,然后手动填充 MyApp.model.ScreenValidation 对象。

或者

2:扩展/覆盖Ext.data.reader.Xml类并使其解析出您想要的信息到您的模型中。

我希望您可以访问 api,因为后两种解决方案听起来都很糟糕。另外,我从来没有尝试过解决这样的问题,所以我可能忽略了一个更简单的解决方案。

我期待听到你如何让这个工作。

祝你好运,布拉德

于 2013-07-22T15:19:45.563 回答