2011-03-20 2 views
12

Я работаю над приложением Sencha Touch и имею список контактов. Когда элемент списка используется, отображается экран ActionSheet, показывающий некоторые основные функции (такие как вызов, удаление и игнорирование). К сожалению, когда краны пользователя и ActionSheet обжигают, элемент списка остается выбранным под накладкой (см скриншот ниже):Sencha Touch - снять элемент списка?

Screenshot of iOS Simulator

Вот функция связана с событием 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'

Любые идеи о том, что я мог бы делать неправильно, или как я могу добиться этого?

ответ

22

Это работает для меня:

listeners: { 
     itemtap: function(dv, ix, item, e) { 
      // Clear the selection soon 
      setTimeout(function(){dv.deselect(ix);},500); 
     } 
    } 
+0

Спасибо, Крис, предположим, что вы тот же Крис, который занимался этим на форумах Sencha для меня. Это действительно работало, и я дал вам несколько реквизитов для вашей помощи! – BenM

+0

@Chris Спасибо :) – Rupesh

+0

Я предпочитаю этот метод гораздо больше, чем метод disableSelection: true, упомянутый ниже (хотя он отлично работает), потому что это подчеркивает выбор пользователя, как обычно, затем отменяет его, тогда как 'disableSelection' никогда не выделяет выделение для Начать с. –

0

Я не пытался воссоздать вашу проблему, но вы можете попробовать:

list.deselect(currentRecord, true); 

После этого вы можете позвонить

doLayout() 

или

doComponentLayout() 

, чтобы обновить представление.

+1

Спасибо @ballmw, но 'doLayout()' является методом класса Container и не принадлежит к объекту List. 'list.refresh()' очищает выбор, но также удаляет временную синюю подсветку, которая не подходит для HCI ... – BenM

+0

Приятно видеть, что вы нашли ответ! – ballmw

0

Это сводило меня с ума.

Хотя утвержденный ответ будет работать, его стоит отметить, что вы можете сделать это с задержкой (как вложенный список делает тоже), как это:

var selModel = app.views.VideosList.items.items[0].getSelectionModel(); 
    Ext.defer(selModel.deselectAll, 200, selModel); 

Я положил, что в моем контроллере (так его называют, когда изменения вида), где app.views.VideosList - это моя основная панель, а app.views.VideosList.items.items [0] - это список на этой панели.

2

Если вы хотите очистить весь список:

var selModel = app.views.notesList.deselect(app.views.notesList.getSelectedRecords()); 
+0

Это работало на Ext.dataview.List, за исключением использования getSelection() вместо getSelectedRecords(). Это было с Sencha Touch 2.1. –

1

setTimeout действительно не является хорошим решением здесь. Это должно быть так:

listeners: { 
     itemtap: function(list, ix, item, e) { 
      // Clear the selection soon 
      list.deselect(list.getSelectedRecords()); 
     } 
    } 
+0

это не работает. Сначала я попробовал это. – Farish

11

В Сенча Touch 2, используйте disableSelection: правда, при создании списка

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}' 
} 
}); 
+3

В случае ** вложенного списка ** также можно использовать эту опцию. Но вы должны добавить его в свойство listConfig следующим образом: 'listConfig: {disableSelection: true}' –

+0

Для некоторых приложений из nestedList вы также можете установить для свойства 'allowDeselect' значение true. –

0

это сделал для меня (Сенча сенсорный 2,3):

list = Ext.Viewport.down('nestedlist'); 
list.getActiveItem().deselectAll(); 
Смежные вопросы