2013-05-10 1 views
0

I имеют следующую структуру для блога:XML вложенных узлов в массиве в ExtJS 4

<channel> 
<item> 
<title>title of post</title> 
(...) 
<gallery folder="path_to_gallery"> 
    <image>path_to_image</image> 
    <image>path_to_other_image</image> 
</gallery> 
<gallery folder="path_to_other_gallery"> 
    <image>path_to_new_image</image> 
    <image>path_to_other_new_image</image> 
</gallery> 
</item> 
</channel> 

Теперь для этого, у меня есть ExtJS модель с hasManyAssociation. Верхняя модель отлично работает, кроме элементов галереи. Мои модели выглядят следующим образом:

родительскую модель:

Ext.define('App.model.News', { 
    extend: 'Ext.data.Model', 
    config: { 
     fields: [{ 
      name: 'title' 
     }, { 
      name: 'description' 
     }, { 
      name: 'thumbnail' 
     }, { 
      name: 'pubDate', 
      type: 'date' 
     }], 
     hasMany: { 
      associationKey: 'gallery', 
      primaryKey: 'folder', 
      model: 'App.model.Gallery' 
     } 
    } 
});  

ребенка модель:

Ext.define('App.model.Gallery', { 
    extend: 'Ext.data.Model', 
    config: { 
     fields: [{ 
      name: 'image' 
     }, { 
      mapping: '@folder', 
      name: 'folder' 
     }] 
    } 
}); 

Кто-нибудь есть ключ, что я делаю не так?

ответ

0

Я закончил тем, что не использовал модель для галерей и просто обращался к необработанным данным. Это позволило мне использовать узлы, как и элементы DOM.

На будущее, вот пример кода:

itemTapped: function(dataview, index, target, record, e, eOpts) { 

    var html = '<h2>' + record.get('title') + '</h2>'; 
    html += record.get('encoded'); 

    var raw = this.down('#mylist').getStore().data.items[index].raw; 
    //further processing happens here. 'raw' contains the complete item-tag as a 
    //DOM object, so we can use querySelectorAll, getAttribute, etc. 

}