2013-05-22 4 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 config 옵션을 적용 할 수 없습니다.

allowDeselect :

부울 사용자가 DataView를, 목록 또는 그리드에서 기록을 해제 할 수 있도록 허용 여기 Ext.selection.Model 문서에서 인용이다. 모드가 'SINGLE'인 경우에만 적용됩니다.

+0

예, 알아요, 내가 두 속성 'TRUE'를 설정,하지만 해제 및/또는 작업을 넣은 사람은 아니다 다중 선택 :((는 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

관련 문제