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,
    //...
4

2 に答える 2

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;
        }
    },
});
于 2013-07-24T12:36:41.223 に答える
1

達成しようとしている動作がわからない。マルチモードではデフォルトで選択解除が許可され、この場合、allowDeselect 構成オプションは適用されません。Ext.selection.Model ドキュメントからの引用は次のとおりです。

allowDeselect : ブール値

ユーザーが DataView、List、または Grid 内のレコードを選択解除できるようにします。モードが「SINGLE」の場合のみ適用されます。

于 2013-05-22T16:57:34.863 に答える