2013-05-22 22 views
1

我必須爲表單創建自定義綁定列表,當它具有單選並且不取消選擇時,它可以正常工作。我怎麼能告訴綁定列表來做取消選擇和多選?多選和取消選擇綁定列表

不工作:

var mode = this.multiselect ? 'MULTI' : 'SINGLE'; 
var sm = bl.getSelectionModel(); // TODO 
sm.setSelectionMode(mode); 
sm.allowDeselect = this.deselect; 

不工作(這是一個擴展的FieldContainer):

var bl = Ext.create('Ext.view.BoundList', { 
    multiSelect: this.multiselect, 
    deselect: this.deselect, 
    //... 

回答

1

不知道你想達到什麼樣的行爲。多模式允許在默認情況下取消選擇,並且allowDeselect配置選項在此情況下不適用。下面是從Ext.selection.Model文檔報價:

allowDeselect:布爾

允許用戶在數據視圖,列表或圖標取消的記錄。 僅適用於模式爲「SINGLE」的情況。

+0

是的,我知道,我設置這兩個屬性'真',但取消和/或MULTISELECT好好嘗試一下工作:((ExtJS的4.2) – Eleanor

+0

(或取消可以成真而多是假...) – Eleanor

+0

這是歷史:http://stackoverflow.com/questions/16669946/using-boundlist-as-widget – Eleanor

1

如果我理解正確,您希望能夠在多重選擇中通過簡單點擊取消選擇唯一選定的記錄。

試試這個代碼:

// Allow deselecting the only selected record in MULTI mode with a simple click. 
// Note that this will only happen when allowdeselect is true 
Ext.override(Ext.selection.Model, { 
    selectWithEvent: function(record, e, keepExisting) { 
     var me = this; 

     switch (me.selectionMode) { 
      case 'MULTI': 
       if (e.ctrlKey && me.isSelected(record)) { 
        me.doDeselect(record, false); 
       } else if (e.shiftKey && me.lastFocused) { 
        me.selectRange(me.lastFocused, record, e.ctrlKey); 
       } else if (e.ctrlKey) { 
        me.doSelect(record, true, false); 
       // Mod Start 
       } else if (me.isSelected(record) && !e.shiftKey && !e.ctrlKey && me.selected.getCount() == 1 && me.allowDeselect) { 
        me.doDeselect(record, false);      
       // Mod End       
       } else if (me.isSelected(record) && !e.shiftKey && !e.ctrlKey && me.selected.getCount() > 1) { 
        me.doSelect(record, keepExisting, false); 
       } else { 
        me.doSelect(record, false); 
       } 
       break; 
      case 'SIMPLE': 
       if (me.isSelected(record)) { 
        me.doDeselect(record); 
       } else { 
        me.doSelect(record, true); 
       } 
       break; 
      case 'SINGLE': 
       // if allowDeselect is on and this record isSelected, deselect it 
       if (me.allowDeselect && me.isSelected(record)) { 
        me.doDeselect(record); 
       // select the record and do NOT maintain existing selections 
       } else { 
        me.doSelect(record, false); 
       } 
       break; 
     } 
    }, 
}); 
+0

感謝這一點,工作在4.2.1。 – zeke

相關問題