2012-07-15 16 views
7

Metin mesajları listesini ve iletiyi gönderen ilişkili kullanıcının adını görüntüleyen temel bir Sencha Touch uygulaması üzerinde çalışıyorum. Eğitmenleri model ilişkilerinin nasıl kurulacağı konusunda çevrimiçi olarak takip ettim, ancak her bir eğitim sunucunun iç içe geçmiş bir yapıya sahip veri ürettiğini varsayar.Sencha Touch ile ilişkili verileri yuvalama olmadan yükleme

Çalıştığım veriler birincil/yabancı anahtar ilişkilerine sahip düz bir yapıya sahiptir ve Sencha'nın her iki deposu tek bir yanıttan yüklemesini nasıl sağlayacağımı anlayamıyorum.

modeli/user.js

Ext.define('App.model.User', { 
    extend: 'Ext.data.Model', 

    config: { 
     fields: [ 
      { name: 'uid', type: 'number' }, 
      { name: 'name', type: 'string' }, 
     ] 
    } 
}); 

mağaza/Users.js

Ext.define('App.store.Users', { 
    extend: 'Ext.data.Store',              

    config: {                  
     model: 'App.model.User',             
     autoLoad: true, 
    } 
}); 

modeli/Message.js

Ext.define('App.model.Message', { 
    extend: 'Ext.data.Model', 

    config: { 
     fields: [ 
      { name: 'id', type: 'number' }, 
      { name: 'uid', type: 'number' }, 
      { name: 'message', type: 'string' } 
     ], 

     associations: [{ 
      type: 'belongsTo', 
      model: 'App.model.User', 
      primaryKey: 'uid', 
      foreignKey: 'uid' 
     }], 

     proxy: { 
      type: 'jsonp', 
      url: 'messages.json', 

      reader: { 
       type: 'json', 
       rootProperty: 'req_messages' 
      } 
     } 
    } 
}); 

mağaza/Messages.js

Ext.define('App.store.Messages', { 
    extend: 'Ext.data.Store', 

    config: { 
     model: 'App.model.Message', 
     autoLoad: true, 
    } 
}); 

İletiler, uygulamam tarafından doğru şekilde yüklendi ve görüntülendi (aşağıdaki örnek JSON yanıtı), ancak ilişkili kullanıcıların mağazaya nasıl yükleneceğini anlayamıyorum. Bu bir yapılandırma ile çözülebilir mi yoksa özel bir okuyucuna mı ihtiyacım var? Herhangi bir yardım takdir!

Numune JSON

{ 
    "users": [{ 
     "uid": "1", 
     "name": "John" 
    }, { 
     "uid": "3033", 
     "name": "Noah" 
    }], 
    "req_messages": [{ 
     "id": "539", 
     "uid": "1", 
     "message": "my message" 
    }, { 
     "id": "538", 
     "uid": "1", 
     "message": "whoops" 
    }, { 
     "id": "534", 
     "uid": "3033", 
     "message": "I love pandas." 
    }] 
} 
+0

Çalışıyor musunuz? –

cevap

1

Gerçekten derneklerle hiç çalışmadım ve ben istek üzerine iki mağaza yük bir şey bulmaya belgede geçti, ama bir şey bulamadık. Yani burada ben bunu yapacağını nasıl:

Modeli

Ext.define('App.model.User', { 
    extend: 'Ext.data.Model', 

    config: { 
     fields: [ 
      'uid', 
      'name' 
     ] 
    } 
}); 

Ext.define('App.model.Message', { 
    extend: 'Ext.data.Model', 

    config: { 
     fields: [ 
      'id', 
      'message', 
      'uid' 
     ], 
     associations: { type: 'hasOne', model: 'User', primaryKey: 'uid', foreignKey: 'uid'} 
    } 
}); 

Mağazaları

Ext.define('App.store.Users', { 
    extend: 'Ext.data.Store',              

    config: {                  
     model: 'App.model.User', 
     autoLoad: true, 

     proxy: { 
      type: 'ajax', 
      url: 'http://www.titouanvanbelle.fr/test.json', 

      reader: { 
       type: 'json', 
       rootProperty: 'users' 
      } 
     }, 

     listeners:{ 
      load:function(s,r,success,op){ 
      var msgs = JSON.parse(op.getResponse().responseText).req_messages; 
      Ext.each(msgs, function(msg) { 
       Ext.getStore('Messages').add(Ext.create('App.model.Message',msg)); 
      }); 
      } 
     } 
    } 
}); 

Ext.define('App.store.Messages', { 
    extend: 'Ext.data.Store', 

    config: { 
     model: 'App.model.Message' 
    } 
}); 

Liste

Ext.define("App.view.Main", { 
    extend: 'Ext.Panel', 

    config: { 
    fullscreen: true, 
    layout:'fit', 
    items: [{ 
     xtype:'list', 
     store:'Messages', 
     itemTpl: new Ext.XTemplate(
      '<tpl for=".">', 
      '{[this.getUserName(values)]} : {message}', 
      '</tpl>', 
      { 
      getUserName(v){ 
       var s = Ext.getStore('Users'), 
        u = s.getAt(s.find('uid',v.uid)); 
       return u.get('name'); 
      } 
      } 
    ) 
    }] 
    } 
}); 

Ve böyle bir şey alırdım: Bu yardımcı olur

enter image description here

Umut. Açıklamaya ihtiyacınız varsa, bana bildirin.

+1

Bir çözüm istiyorum, böylece baktığımda çapraz referansı kendim yapmak zorunda değilim. Dernekler neden daha basit bir görüntü elde etmek için yeterli değil? –

+0

Hala bunu yapmanın bir yolunu anlamadım ... –

İlgili konular