user568866
user568866

Reputation:

How to Add a Button to Each Row of a List?

How can I add a Sencha button to each row of a list? I've added text placeholders in the image to illustrate where the buttons should go.

enter image description here

Ext.application({
    launch: function() {
        var view = Ext.Viewport.add({
            xtype: 'navigationview',

            items: [
                {
                    xtype: 'list',
                    title: 'List',
                    itemTpl: '{name} [BUTTON]',

                    store: {
                        fields: ['name'],
                        data: [
                            { name: 'one' },
                            { name: 'two' },
                            { name: 'three' }
                        ]
                    },

                    listeners: {
                        itemtap: function(list, index, target, record) {
                            view.push({
                                xtype: 'panel',
                                title: record.get('name'),
                                html: 'This is my pushed view!'
                            })
                        }
                    }
                }
            ]
        });
    }
});

Upvotes: 7

Views: 7424

Answers (2)

Deepak Kumar Sharma
Deepak Kumar Sharma

Reputation: 69

In place of Button we can use Image in each row of list and get click event in listener(in my case i did in controller class). I hope following will help you:

A list containing view page:

items: [
   {
        xtype: 'list',
        ui: 'normal',
        itemTpl: [

            '<div class="x-list-item speaker">',
                    '<div class="avatar" style="background-image: url(resources/images/contactImages/{item6});"></div>',
                    '<div class="rightarrow" style="background-image: url(resources/images/homeScreenIphone/list_arrow.png);"></div>',
                    '<div class="image_popup_email" style="background-image: url(resources/images/commonImages/mail.png);"></div>',
                    '<div class="image_popup_workphone_icon" style="background-image: url(resources/images/commonImages/workphone_icon.png);"></div>',
                    '<div class="image_popup_phone" style="background-image: url(resources/images/commonImages/phone.png);"></div>',
                    '<h3>{item1}</h3>',
                    '<h4>{item2}</h4>',
            '</div>'
     ],
     store: 'ContactItemListStore'
   }
   ]

In controller classs:

onContactSelect: function(list, index, element, record, evt){

    // if click on any icon(Cell/Work Phone/Email) in any row of list
    if(evt.getTarget('.image_popup_phone')) {

        var contactNoCell = record.getData().item4;
        window.location.href = "tel:"+contactNoCell;

    }else if(evt.getTarget('.image_popup_workphone_icon')) {

        var contactNoOffice = record.getData().item7;
        window.location.href = "tel:"+contactNoOffice;

    }else if(evt.getTarget('.image_popup_email')) {

        var emailId = record.getData().item5;
        window.location.href = "mailto:"+emailId;

    }else{

    // if click on list row only(not any icon)   
        if (!this.showContactDetail) {
            this.showContactDetail = Ext.create('MyApp.view.phone.MyContactDetail');
        }

        // Bind the record onto the show contact view
        this.showContactDetail.setRecord(record);

        // Push the show contact view into the navigation view
        this.getMain().push(this.showContactDetail);
    }
        //disable selection while select row in list
        list.setDisableSelection(true);
}

Upvotes: 5

Thiem Nguyen
Thiem Nguyen

Reputation: 6365

This cannot be done with Ext.List, you have to use ComponentView instead.

It has some key concepts: Ext.dataview.Component.DataItem, custom configuration and transformation through Ext.factory(), for more details please see this:

http://docs.sencha.com/touch/2-0/#!/guide/dataview

Hope it helps.

Upvotes: 6

Related Questions