Ответ 1
Это работает для меня:
listeners: {
itemtap: function(dv, ix, item, e) {
// Clear the selection soon
setTimeout(function(){dv.deselect(ix);},500);
}
}
Я работаю над приложением Sencha Touch и имею список контактов. Когда элемент списка используется, отображается экран ActionSheet, показывающий некоторые основные функции (такие как вызов, удаление и игнорирование). К сожалению, когда пользователь нажимает и запускает ActionSheet, элемент списка остается выбранным под наложением (см. Снимок экрана ниже):
Здесь функция, связанная с событием itemTap:
itemTap: function(list, index)
{
// Deselect the selected record:
var currentRecord = list.getStore().getAt(index);
currentRecord.forename = currentRecord.get('forename');
currentRecord.surname = currentRecord.get('surname');
currentRecord.phoneNumber = currentRecord.get('phoneNumber');
currentRecord.shortFullName = currentRecord.forename + ' ' + currentRecord.surname[0];
list.getStore().deselect(index, true);
callButton.setText('Call ' + currentRecord.shortFullName + ' (' + currentRecord.phoneNumber + ')');
unfriendButton.setText('Remove ' + currentRecord.shortFullName + ' as friend');
friendActionSheet.show();
}
К сожалению, list.getStore().deselect(index, true)
возвращает следующую ошибку: Object [object Object] has no method 'deselect'
Любые идеи о том, что я могу делать неправильно, или как я могу это достичь?
Это работает для меня:
listeners: {
itemtap: function(dv, ix, item, e) {
// Clear the selection soon
setTimeout(function(){dv.deselect(ix);},500);
}
}
В Sencha Touch 2 используйте disableSelection: true, создавая список
Ext.define('App.view.NewsList',{
extend: 'Ext.List',
xtype: NEWS_LIST,
config: {
store: NEWS_FEED,
//deselectOnContainerClick: true,// not working in Sencha Touch 2
disableSelection: true, // since Sencha Touch 2
itemTpl: '{heading}'
}
});
Если вы хотите очистить весь список:
var selModel = app.views.notesList.deselect(app.views.notesList.getSelectedRecords());
setTimeout
действительно не является хорошим решением здесь. Это должно быть так:
listeners: {
itemtap: function(list, ix, item, e) {
// Clear the selection soon
list.deselect(list.getSelectedRecords());
}
}
Я не пытался воссоздать вашу проблему, но вы можете попробовать:
list.deselect(currentRecord, true);
После этого вам может потребоваться позвонить
doLayout()
или
doComponentLayout()
чтобы обновить представление.
Это заставило меня INSANE.
Пока утвержденный ответ будет работать, стоит отметить, что вы можете сделать это с задержкой (например, вложенным списком):
var selModel = app.views.VideosList.items.items[0].getSelectionModel();
Ext.defer(selModel.deselectAll, 200, selModel);
Я поместил это в свой контроллер (поэтому его вызывается при изменении представления), где app.views.VideosList - это моя основная панель, а app.views.VideosList.items.items [0] - это список на этой панели.
это сделало это для меня (sencha touch 2.3):
list = Ext.Viewport.down('nestedlist');
list.getActiveItem().deselectAll();