1

我只是想在我创建的模型中解析嵌套的 JSON。我为每个 JSON 节点创建了三个模型(Detalhe、Propriedade 和 Assinatura)。商店代理没有解析 Detalhe 模型的数据。

我还尝试将“映射”属性放在 hasMany 属性上,并具有相同的节点名称。它没有用。Ext.Template 也无法读取存储数据并填充查看器。

有什么建议么?

这是我的 JSON:

{
   "details": {
      "customProperties": [
         {
            "chave": "Data de Criação",
            "valor": "30/10/2013"
         },
         {
            "chave": "Nome",
            "valor": "Blah Stuff"
         }
      ],
      "signatures": [
         {
            "nome": "Data de Criação",
            "data": "30/10/2013"
         },
         {
            "nome": "Nome do Cliente",
            "data": "John Doe"
         }
      ]
   },
   "success": true
}

以及解析代码:

Ext.define('Propriedade', {
            extend: 'Ext.data.Model',
            fields: ['chave', 'valor'],
            belongsTo: 'Detalhe'
        });

        Ext.define('Assinatura', {
            extend: 'Ext.data.Model',
            fields: ['nome', 'data'],
            belongsTo: 'Detalhe'
        });

        Ext.define('Detalhe', {
            extend: 'Ext.data.Model',
            hasMany: [
                {model: 'Propriedade', name: 'customProperties'},
                {model: 'Assinatura', name: 'signatures'}
            ]
        });

        var store = Ext.create('Ext.data.Store', {
            id: 'customPropertiesStore',
            model: 'Detalhe',
            autoLoad: false,
            proxy: {
                type: 'ajax',
                url: 'info.json',
                reader: {
                    type: 'json',
                    root: 'details',
                    successProperty: 'success'
                }
            }
        });

        var docId = "some id"; 
        var folders = "some folder";

        store.load({
            params: {docId: docId, folders: folders}
        });

        var tpl = new Ext.XTemplate(
            '<tpl for="customProperties">',
                '<div class="customPropertyItem">',
                    '<span><label>{chave}</label>: {valor}</span>',
                '</div>',
            '</tpl>',
            '<tpl for="signatures">',
                '<div class="signatureItem">',
                    '<span><label>{nome}</label>: {data}</span>',
                '</div>',
            '</tpl>'
            );

        var viewer = Ext.create('Ext.view.View', {
            store: Ext.data.StoreManager.lookup('customPropertiesStore'),
            tpl: tpl,
            itemSelector: 'customPropertyItem',
            emptyText: 'Nothing found.'
        });
4

0 回答 0