2011-03-20 56 views
12

Tôi đang làm việc trên ứng dụng Sencha Touch và có danh sách liên hệ. Khi một mục danh sách được khai thác, một ActionSheet được hiển thị cho thấy một số chức năng cơ bản (chẳng hạn như gọi, xóa và bỏ qua). Thật không may, khi các vòi sử dụng và ActionSheet là bắn, mục Danh sách vẫn được chọn bên dưới lớp phủ (xem hình dưới đây):Sencha Touch - bỏ chọn mục danh sách?

Screenshot of iOS Simulator

Dưới đây là các chức năng liên kết với các sự kiện 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(); 
} 

Thật không may, list.getStore().deselect(index, true) trả về lỗi sau: Object [object Object] has no method 'deselect'

Bất kỳ ý tưởng nào về những gì tôi có thể làm sai hoặc làm cách nào để đạt được điều này?

Trả lời

22

này làm việc cho tôi:

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

Cảm ơn Chris, giả sử bạn là Chris đã giải quyết nó trên các diễn đàn Sencha cho tôi. Nó đã thực sự làm việc, và tôi đã cho bạn một số đạo cụ để được giúp đỡ của bạn! – BenM

+0

@Chris Cảm ơn :) – Rupesh

+0

Tôi thích phương pháp này nhiều hơn phương pháp 'disableSelection: true' được đề cập bên dưới (mặc dù nó hoạt động tốt) vì điều này làm nổi bật lựa chọn của người dùng như bình thường rồi bỏ chọn nó, trong khi' disableSelection' không bao giờ làm nổi bật lựa chọn bắt đầu với. –

0

tôi đã không cố gắng để tái tạo vấn đề của bạn, nhưng bạn có thể muốn thử:

list.deselect(currentRecord, true); 

Sau khi bạn làm điều đó bạn có thể phải gọi

doLayout() 

hoặc

doComponentLayout() 

để làm mới chế độ xem.

+1

Cảm ơn @ballmw, nhưng 'doLayout()' là một phương thức của lớp Container, và không thuộc về một đối tượng List. 'list.refresh()' xóa lựa chọn, nhưng cũng loại bỏ đánh dấu màu xanh tạm thời không tốt cho HCI ... – BenM

+0

Rất vui được thấy bạn tìm thấy câu trả lời! – ballmw

0

này chở tôi điên.

Trong khi câu trả lời đã được phê duyệt sẽ làm việc, giá trị của nó lưu ý rằng bạn có thể làm điều đó với một sự chậm trễ (như danh sách lồng nhau không quá) như thế này:

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

tôi đặt rằng trong bộ điều khiển của tôi (để gọi nó khi chế độ xem thay đổi), trong đó app.views.VideosList là bảng điều khiển chính của tôi và app.views.VideosList.items.items [0] là danh sách trong bảng điều khiển đó.

2

Nếu bạn muốn xóa toàn bộ danh sách:

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

Điều này làm việc trên một Ext.dataview.List, ngoại trừ việc sử dụng getSelection() thay vì getSelectedRecords(). Đó là với Sencha Touch 2.1. –

1

setTimeout thực sự không phải là một giải pháp tốt ở đây. Nó phải là như thế này:

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

điều này dường như không hoạt động. Tôi đã thử nó như thế này trước. – Farish

11

Trong Sencha Touch 2, sử dụng disableSelection: true, trong khi tạo ra một danh sách

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

Trong trường hợp ** danh sách lồng nhau **, bạn cũng có thể sử dụng tùy chọn đó. Nhưng bạn phải thêm nó vào thuộc tính 'listConfig' như sau:' listConfig: {disableSelection: true} ' –

+0

Đối với một số ứng dụng của nestedList bạn cũng có thể đặt thuộc tính' allowDeselect' thành true. –

0

này đã làm nó cho tôi (sencha touch 2.3):

list = Ext.Viewport.down('nestedlist'); 
list.getActiveItem().deselectAll(); 
Các vấn đề liên quan