简体   繁体   English

Sencha Touch - 取消选择列表项?

[英]Sencha Touch - deselect list item?

I'm working on a Sencha Touch application, and have a list of contacts. 我正在研究Sencha Touch应用程序,并有一个联系人列表。 When a list item is tapped, an ActionSheet is displayed showing some basic functions (such as call, delete and ignore). 当点击列表项时,会显示一个ActionSheet,显示一些基本功能(如调用,删除和忽略)。 Unfortunately, when the user taps and the ActionSheet is fired, the List item remains selected underneath the overlay (see the screenshot below): 不幸的是,当用户点击并触发ActionSheet时,List项目仍然在叠加层下面被选中(参见下面的屏幕截图):

iOS模拟器的屏幕截图

Here's the function bound to the itemTap event: 这是绑定到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();
}

Unfortunately, list.getStore().deselect(index, true) returns the following error: Object [object Object] has no method 'deselect' 不幸的是, list.getStore().deselect(index, true)返回以下错误: Object [object Object] has no method 'deselect'

Any ideas on what I could be doing wrong, or how I can achieve this? 关于我可能做错了什么的想法,或者我怎么能做到这一点?

This works for me: 这对我有用:

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

In Sencha Touch 2, use disableSelection: true, while creating a list 在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 is really not a good solution here. setTimeout在这里真的不是一个好的解决方案。 It should be like this: 它应该是这样的:

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

this did it for me (sencha touch 2.3): 这对我来说(sencha touch 2.3):

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

I haven't tried to recreate your problem but you may want to try: 我没有尝试重新创建您的问题,但您可能想尝试:

list.deselect(currentRecord, true);

After you do that you may have to call 完成后,您可能需要打电话

doLayout()

or 要么

doComponentLayout()

to refresh the view. 刷新视图。

This drove me INSANE. 这让我开始了INSANE。

While the approved answer will work, its worth noting that you can do it with a delay(like nested list does too) like this: 虽然批准的答案会起作用,但值得注意的是,您可以延迟(如嵌套列表)也可以这样做:

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

I put that in my controller (so its called when the view changes), where app.views.VideosList is my main panel and app.views.VideosList.items.items[0] is the list in that panel. 我把它放在我的控制器中(所以当视图改变时调用它),其中app.views.VideosList是我的主面板,app.views.VideosList.items.items [0]是该面板中的列表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM