ListItem的items属性的XTemplate定义

时间:2015-09-30 08:56:59

标签: javascript sencha-touch-2

我正在使用Sencha 2.3.0,我希望将一个XTemplate与ListItem上的组件(文本字段)并排放置。上面的代码适用于DataView / DataItem,但我想使用仅在List / ListItem上可用的分组属性。

嵌套的Xtemplate被渲染为DataItem。如何让它适用于ListItem?我也接受放弃这个嵌套结构的解决方案,并直接在ListItem上使用xtemplate作为tpl属性(当然也必须实现带有监听器的文本域)。

列表

Ext.define( 'app.view.myList', {
    //extend: 'Ext.dataview.DataView',
    extend: 'Ext.dataview.List',

    xtype: 'mylist',

    requires: [
        'app.view.MyItem'
    ],

    config: {
        title: "myTitle",
        cls: 'mylist',
        defaultType: 'myitem',
        grouped: true,
        store: 'myStore',
        useComponents: true,
        itemCls: 'myitem',

        items: [
            {
                // some components
            }
        ]
    }
});

列表项

Ext.define( 'app.view.myItem', {

    //extend: 'Ext.dataview.component.DataItem',
    extend: 'Ext.dataview.component.ListItem',
    xtype: 'myitem',

    config: {
        cls: 'myitem',

        items: [
            {
                xtype: 'component',
                tpl: new Ext.XTemplate([
                        '<table cellpadding="0" cellspacing="0" class="myitemXTemplate">',
                            //some xtemplate content
                        '</table>'
                    ].join( "" ),
                    {
                        compiled: true
                    })
            },

            {
                label: 'some label',
                cls : 'myitemtextfield',
                xtype: 'textfield',
                name: 'myitemtextfield'
             }
        ]
    }
});

提前致谢!

1 个答案:

答案 0 :(得分:1)

修改/touch-2.4.2/examples/list/index.html

Modifed /touch-2.4.2/examples/list/index.html

模特:

Ext.define('model1', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
            {name: 'firstName', type: 'string'},
            {name: 'lastName', type: 'string'}
        ]
    }
});

CustomListItem

Ext.define('DataItem', {
extend: 'Ext.dataview.component.ListItem',
        xtype: 'basic-dataitem',
        requires: [
                'Ext.Button',
                'Ext.Component',
                'Ext.layout.HBox',
                'Ext.field.Checkbox'
        ],
        config: {
        dataMap : {
       /* getFirstname : {
         setData : 'firstName'

         },*/
        getLastname : {
        setValue : 'lastName'
        }
        },
                layout: {
                type: 'hbox',
                        height:'200px',
                },
                firstname: {
                cls: 'firstname',
                        xtype:'component',
                        data:{data:'hej'},
                        tpl: new Ext.XTemplate([
                                '<H1>',
                                '{data}',
                                '</H1>'
                        ].join(""),
                        {
                        compiled: true
                        })

                },
                lastname: {
                xtype:'textfield',
                css:'lastname'



                }

        },
        applyFirstname : function (config) {
            return Ext.factory(config, Ext.Component, this.getFirstname());
        },
        updateFirstname : function (newName) {
            if (newName) {
                this.add(newName);
            }
        },
        applyLastname : function (config) {
            return Ext.factory(config, Ext.Component, this.getLastname());
        },
        updateLastname : function (newAge) {
            if (newAge) {
                this.add(newAge);
            }
        },
        applyFirstName: function (config) {
            return Ext.factory(config, 'Ext.Component', this.getLastname());
        },
        updateRecord: function(record) {     
        if (!record) {
            return;
        }


        this.getFirstname().setData({data:record.get("firstName")});
        this.callParent(arguments);

    }
        });

商店

var store = Ext.create('Ext.data.Store', {
        //give the store some fields
        model: 'model1',
        //filter the data using the firstName field
        sorters: 'firstName',
        //autoload the data from the server
        autoLoad: true,
        //setup the grouping functionality to group by the first letter of the firstName field
        grouper: {
            groupFn: function (record) {
                return record.get('firstName')[0];
            }
        },
        //setup the proxy for the store to use an ajax proxy and give it a url to load
        //the local contacts.json file
        proxy: {
            type: 'ajax',
            url: 'contacts.json'
        }
    });

列表

 xtype: 'list',
            useSimpleItems: false,
            defaultType: 'basic-dataitem',
            id: 'list',
            ui: 'round',     
            //bind the store to this list
            store: store