Reputation:
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.
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
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
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