使用extJS4中的hasMany关联将嵌套XML解析为嵌套模型

时间:2014-07-24 08:08:46

标签: xml model xml-parsing extjs4 model-associations

我正在尝试将嵌套的xml文件解析为具有hasMany关联的模型。我正在使用ext JS 4.1.0。使用额外标签,它工作正常。但如果我删除了一些标签,我就无法工作。

这是我的load_album.xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<data>
    <album id="3" name="Midnight Boom">
        <tracklist>
            <track id="5" name="Last Day of Magic" />
            <track id="12" name="Goodnight Bad Morning" />
        </tracklist>
    </album>
    <album id="4" name="Blood Pressures">
        <tracklist>
            <track id="1" name="Future Starts Slow" />
        </tracklist>
    </album>
</data>

以下是模型:

Ext.define('MyApp.model.Album', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'id',
        mapping: '@id'
    }, {
        name: 'name',
        type: 'string',
        mapping: '@name'
    }],
    associations: [{
        type: 'hasMany',
        model: 'MyApp.model.Track',
        name: 'tracks',
        associationKey: 'tracklist',
        reader: {
            type: 'xml',
            record: 'track',
            root: 'tracklist'
        }
    }],
    proxy: {
        type: 'ajax',
        url: 'xml/album_load.xml',
        reader: {
            type: 'xml',
            root: 'data',
            record: 'album'
        }
    }
});

Ext.define('MyApp.model.Track', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'id',
        mapping: '@id'
    }, {
        name: 'name',
        type: 'string',
        mapping: '@name'
    }]
});

这是商店:

Ext.define('MyApp.store.Albums', {
    extend: 'Ext.data.Store',
    model: 'MyApp.model.Album'
});

我列出了这样的数据:

listdata: function() {
    var albumsstore = Ext.data.StoreManager.get("Albums");
    albumsstore.load(function(record, options, success) {
        if (success) {
            Ext.each(record, function(record) {
                console.log('Album: ' + record.data.name);
                var tracks = record.tracks();
                if (tracks.data.length > 0) {
                    Ext.each(tracks.data.items, function(tracks) {
                        console.log('Track: ' + tracks.data.name);
                    });
                }
            });
        }
    });
}

结果:

Album: Midnight Boom
Track: Last Day of Magic
Track: Goodnight Bad Morning
Album: Blood Pressures
Track: Future Starts Slow

工作正常。

我的问题是,如果我删除这样的标记,如何正确解析xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<data>
    <album id="3" name="Midnight Boom">
        <track id="5" name="Last Day of Magic" />
        <track id="12" name="Goodnight Bad Morning" />
    </album>
    <album id="4" name="Blood Pressures">
        <track id="1" name="Future Starts Slow" />
    </album>
</data>

它可以读取专辑数据,但不能读取曲目数据。这是extJS模型的限制吗?如何像这样解析xml?感谢。

0 个答案:

没有答案