Sencha Touch:itemTpl循环?

时间:2012-04-17 15:40:02

标签: templates sencha-touch sencha-touch-2

假设输入数据是json,如:

{   "facet_fields":{
        "cat":[
            "electronics",3,
            "card",2,
            "graphics",2,
            "music",1
        ]}}

数组“cat”已恢复,应使用for循环显示。我陷入了这一点:)

到目前为止的代码:

Ext.define('Sandbox.view.FacetList', {
    extend: 'Ext.List',
    xtype: 'facet-list',

    config: {
        baseCls: 'article-list',
        itemTpl: '' +
            '<div class="article">' +
                '<tpl for="categories">' +
                      '<div>Item {#}</div>' +
                 '</tpl>' +
            '</div>'
    }

});

输出:Item 1 Item 2 Item 3 Item 4

我希望看到以下输出: electronics (3), card (2), graphics (2), music (1)

无法找到正确的方法。 谢谢你的时间 :-) 学家

1 个答案:

答案 0 :(得分:4)

我假设您正在为您的数据使用模型和商店?如果是这样,我建议您使用字段中提供的convert方法。它允许您将cat字段转换为tpl可以理解的更好的数据。

Ext.define('MyModel', {
    extend: 'Ext.data.Model',

    config: {
        fields: [
            {
                name: 'cat',
                convert: function(values, record) {
                    var data = [],
                        ln = values.length,
                        i, name, value;

                    // loop through each of the array values
                    for (i = 0; i < ln; i++) {
                        // if it is a name, save it
                        if (i % 2 == 0) {
                            name = values[i];
                        }

                        // if it is a value, save the value and push 
                        // to the data array
                        if (i % 2 == 1) {
                            value = values[i];

                            data.push({
                                name: name,
                                value: value
                            });
                        }
                    }

                    // return the data array for this field
                    return data;
                }
            },
            ...
        ]
    }
});

然后你就可以在你的tpl中使用它了:

tpl: [
    '<tpl for="cat">',
        '{name}: {value}, '
    '</tpl>'
].join()