Sencha Touch ExtJS adding checkbox to list
Doing development in Sencha Touch 1.0. I'm using Ext.List to render a list, but I also want the start of each list item to start with a checkbox. I also want to change its state based on an array item value, the array which is given to config option. Is there a way to add a simple Ext.form.Checkbox to an Ext.List.
If I instead use a <input type="checkbox".../>
to the <itemTpl>
config option, then it looks ugly in display and secondly I don't know how to listen to events on the checkbox
Here is the code for ur eye candy:
Ext.regModel('Todos', {
fields: ['title', 'completed_at']
});
var groupingBase = {
itemTpl: '<div class="contact2"><strong>{title}</strong></div>',
selModel: {
mode: 'SINGLE',
allowDeselect: true
},
// grouped: true,
indexBar: true,
onItemDisclosure: {
scope: 'test',
handler: function (record, btn, index) {
alert('Disclose more info for ' + record.get('title'));
}
},
store: new开发者_开发知识库 Ext.data.Store({
model: 'Todos',
sorters: 'title',
getGroupString: function (record) {
return record.get('title')[0];
},
data: [todos] //todos array is prev populated with required items' properties
})
};
myList = new Ext.List(Ext.apply(groupingBase, {
fullscreen: true
}));
//List ends
tasksFormBase = {
title: 'Tasks',
iconCls: 'favorites',
cls: 'card2',
badgeText: '4',
layout: 'fit',
items: [
myList, {
xtype: 'checkboxfield',
name: 'cool',
label: 'Cool'
}],
dockedItems: [todosNavigationBar]
};
//tasksFormBase is then added to a Ext.TabPanel config option
any help form Ext master???
I figured out, I need to use a template I used the itemTpl property of the List control with the tpl looking like:
<textarea id="todos-template" class="x-hidden-display">
<div id="todo_item_{todo_id}" class="todo_list">
<input type="checkbox" id="todo_check_{todo_id}" class="todo_checkbox unchecked"/> <strong>{title}</strong>
</div>
</textarea>
and added the following listener:
itemtap: function(dataview, index, item, event) {
var todo = dataview.getStore().getAt(index).data;
if (eve.getTarget('input#todo_check_'+todo.todo_id)) {
Ext.get(item).addCls('selected');
ele = Ext.get('todo_check_'+todo.todo_id);
//reverse condition as the event is fired before the state is set
if(!ele.getAttribute('checked')) {
todo.completed_at = Api.formatDate(new Date());
ele.replaceCls('unchecked', 'checked');
} else {
ele.replaceCls('checked', 'unchecked');
todo.completed_at = null;
}
}
So on tapping the list item, I detect whether the checkbox is tapped and change the relevant div CSS classes accordingly. I hope the same thing can work for radio as well.
For Sencha Touch the icons are stored in a font: Pictos. Here is the character map For instance this is how I created a checkbox button(Note: the callback function is missing for the link). Simply change the font color to indicate checked or not.
In Css:
a {
text-decoration: none;
}
.icon {
font-family: "Pictos";
}
In HTML:
<span>
Item #1
<a href="#">
<span class="icon">3</span>
</a>
</span>
精彩评论