我正在尝试将嵌套的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?感谢。