0

我试图在 Sencha Touch 2 项目中使用商店(实际上是带有本地数据的商店)填充自定义组件。

我的想法是为商店中的每个元素创建一个自定义组件,但实际上什么也没发生。

我已经尝试了几件事,但没有任何效果,你能帮帮我吗?我做了一个例子来说明这个问题:

模型:

Ext.define('project.model.city', {
  extend: 'Ext.data.Model',
  config: {
    fields: [
      {name: 'country', type: 'string'},
      {name: 'city', type: 'string'}
    ]
  }
});

店铺:

Ext.define('project.store.cities', {
  extend: 'Ext.data.Store',
  requires: ['project.model.city'],
  model: 'project.model.city',
  autoLoad: true,
  data: [
    { country: 'Germany', city: 'Berlin' },
    { country: 'Italy', city: 'Rome' }
  ]
});

与商店一起查看:

Ext.define('project.view.cityAll', {
  extend: 'Ext.Panel',
  xtype: 'cityAllView',
  config: {
    items:[{
      xtype: 'cityItemView',
      store: 'project.store.cities',
    }]
  }
});

自定义组件视图:

Ext.define('project.view.cityItem', {
  extend: 'Ext.Panel',
  xtype: 'cityItemView',
  config: {
    items: [{
      itemTpl: '{city}'
    }]
  }
});
4

2 回答 2

0

您需要将商店分配给 cityItemView 而不是 cityAllView。cityItemView指定了模板,需要加载数据。

Ext.define('project.view.cityItem', {
  extend: 'Ext.Panel',
  xtype: 'cityItemView',
  config: {
    items: [{
      xtype:'list', 
      itemTpl: '{city}'
      store:'project.store.cities'
    }]
  }
});

如果要将数据设置到面板中,则需要调用setData(). 面板不能直接从商店加载数据。您可以改用列表视图,以便显示城市、国家/地区对。cityView 不再需要以这种方式存储属性。

试试这个。

于 2013-02-05T09:24:30.933 回答
0

您可以在 store 中添加负载侦听器,该侦听器将遍历记录并创建尽可能多的面板:

    listeners : {
        load: function( me, records, successful, operation, eOpts ){ 
            var plist = [];
            var cv = Ext.Create('project.view.cityAll');
            if(successful){

                var data = records[i].getData();
                for(var i=0; i<records.length; i++){
                    plist.push({
                        xtype : 'cityItemView',
                        data : data
                    });
                }
                cv.add(plist);
            } 
            // Now add cv to viewport or wherever you want
        }
}

你必须改变cityItemView以任何你想要的方式使用数据。如果您使用的是初始化方法,您可以像这样访问它this.config.data

于 2013-02-05T12:14:23.470 回答