Подтвердить что ты не робот

Sencha Touch - снять элемент списка?

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

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'

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

list.deselect(currentRecord, true);

После этого вам может потребоваться позвонить

doLayout()

или

doComponentLayout()

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

Ответ 6

Это заставило меня 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] - это список на этой панели.

Ответ 7

это сделало это для меня (sencha touch 2.3):

list = Ext.Viewport.down('nestedlist');
list.getActiveItem().deselectAll();