2011-03-20 20 views
12

Sencha Touch uygulamasında çalışıyorum ve bir irtibat listeniz var. Bir liste öğesine dokunulduğunda, bazı temel işlevleri (çağrı, silme ve göz ardı etme gibi) gösteren bir ActionSheet görüntülenir. kullanıcı musluklar ve ActionSheet ateşlendiğinde yazık ki, Liste öğesi (aşağıdaki ekran görüntüsü) bindirme altına seçili kalır:Sencha Touch - listenin seçimini kaldır?

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(); 
} 
:

Screenshot of iOS Simulator İşte

itemTap olaya bağlı fonksiyon bulunuyor Object [object Object] has no method 'deselect'

yanlış yapıyor olabilir üzerinde herhangi bir fikir veya bunu nasıl elde edebilirsiniz:

Maalesef list.getStore().deselect(index, true) aşağıdaki hata verir?

cevap

22

Bu benim için çalışıyor:

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

Teşekkürler Chris, sen benim için Sencha forumlarında tartıştığın aynı Chris olduğunu farz et. Gerçekten işe yaradı, ve yardımın için sana birkaç sahne verdim! – BenM

+0

@Chris Teşekkürler :) – Rupesh

+0

Bu yöntemi, aşağıda belirtilen 'disableSelection: true' yönteminden çok daha fazlasını tercih ediyorum (her ne kadar harika çalışıyor olsa da), çünkü bu kullanıcının seçimini her zamanki gibi vurguladıktan sonra, 'disableSelection' seçeneği hiçbir zaman vurgulamaz. ile başlar. –

0

Sorununu yeniden denemedim ama denemek isteyebilirsiniz: Eğer

doLayout() 

veya

doComponentLayout() 
aramaya sen olabileceğini yaptıktan sonra

list.deselect(currentRecord, true); 

Görünümü yenilemek için

.

+1

Teşekkür @ballmw, ancak 'doLayout()', Container sınıfının bir yöntemidir ve bir List nesnesine ait değildir. 'list.refresh()' seçimi temizler, ancak aynı zamanda HCI için uygun olmayan mavi vurgulamayı da kaldırır ... – BenM

+0

Size bir cevap bulduğunuza sevindim! – ballmw

0

Bu beni deli sürdü. onaylı cevap bölümü çalışsa

, onun değerinde böyle (iç içe listesi çok yaptığı gibi) bir gecikme ile bunu yapabilirsiniz belirterek:

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

benim denetleyicisi (böylece onun çağrılan koymak app.views.VideosList'in benim ana panelim ve app.views'ım olduğu yer olan view.VideosList.items.items [0] bu paneldeki listedir. Eğer tüm listeyi silmek istiyorsanız

2

:

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

Bu, getSelectedRecords() yerine getSelection() kullanımı dışında bir Ext.dataview.List üzerinde çalıştı. Bu Sencha Touch 2.1 ile yapıldı. –

1

setTimeout gerçekten burada iyi bir çözüm değildir. Bu böyle olmalı:

Sencha'sı Dokunma 2'de
listeners: { 
     itemtap: function(list, ix, item, e) { 
      // Clear the selection soon 
      list.deselect(list.getSelectedRecords()); 
     } 
    } 
+0

bu işe yaramaz. Bunu ilk olarak denedim. – Farish

11

, kullanmak disableSelection: true, bir liste

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

** nestedlist ** durumunda bu seçeneği kullanmak da mümkündür. Ama bunu 'listConfig' özelliğine eklemek zorundasınız: 'listConfig: {disableSelection: true}' –

+0

Bazı nestedList uygulamaları için 'allowDeselect' özelliği true olarak da ayarlanabilir. –

0

bu benim için yaptığını (sencha dokunmatik 2.3) oluştururken:

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