0

我要做的是有条件地显示数据列表的项目,即当项目满足条件时,它将显示,否则将不显示(不是显示空白项)。我要显示的数据是这样的:

 [
      {'label':'one','isvisible':'1','value':'one'},
      {'label':'two','isvisible':'1','value':''},
      {'label':'three','isvisible':'0','value':'three'},
      {'label':'four','isvisible':'0','value':''}
 ]

我的清单如下:

                        xtype : 'list',
                        id :  'myListId',
                        disableSelection : true,
                        itemTpl : [
                                 '<tpl if="isvisible == 1 && value !=\'\'  ">',
                                    '{label}{value}',
                                 '</tpl>'
                        ]

但是当列表显示时,如果项目满足条件(属性“可见”为 1 或属性“值”为空),我会得到一些空白行。

起初,我使用'<tpl for="." ',我点击了这个链接: 链接但我的数据列表没有根节点,所以我使用了上面的 itemtpl。

我不想修改我的数据列表的结构,我该怎么办?

更新:我不使用商店。我只是获取数据然后将数据分配给列表的数据配置,例如:

var data=[{text:'1'},{text:'2'},{text:'3'}];//usually the data array comes from the response of an ajax request to the remote server.
var list=Ext.getCmp('myListId');
list.setData(data);
4

2 回答 2

0

您可以在推送列表视图之前过滤控制器中的商店:

store.filter('isvisible', '1');

http://docs.sencha.com/touch/2.2.1/#!/api/Ext.data.Store-method-filter

编辑:

initialize: function(list) {
    var data = [];

    Ext.each(list.getData(), function(rec) {
        if (rec.data.isvisible == 1) data.push(rec);
    });

    list.setData(data);
}
于 2013-08-07T03:54:35.777 回答
0

试试这个

          {
                xtype : 'list',
                disableSelection : true,
                itemTpl : [
                     '<tpl if="isvisible == 1 && value !=\'\'  ">',
                     '{label}{value}',
                      '</tpl>'
                ],
               listeners : {
                initialize: function(list, eOpts ) {
                    var visibleFilter = new Ext.util.Filter({
                        property: 'isvisible',
                        value   : 1
                    });

                    var valueFilter = new Ext.util.Filter({
                        filterFn: function(item) {                               
                            return item.data.value.length != 0;
                        }
                    });

                    list.getStore().setFilters([visibleFilter,valueFilter]);
                }
            }
        }   
于 2013-08-07T05:26:39.570 回答