2

コンテキスト メニューのあるグリッドがあります。右クリックで行が選択されないようにする方法を知っています。私はちょうどこの方法でそれを行います:

var allowSelection=true;
Ext.getCmp('grid').on('beforeitemmousedown', function(grid, record, item, index, event, eOpts) { 
if (event.button==0) allowSelection=true ;
else allowSelection=false;
});
Ext.getCmp('grid').on('beforeselect', function(grid, record, index, eOpts) { 
 return allowSelection;
});

しかし、私が今必要としているのは、行の選択解除を防ぐことです。実際、現在のコードでは行の選択が妨げられていますが、行の選択解除は妨げられていません。

編集

右クリック イベントにより、コンテキスト メニューがポップアップします。それを行うコードの部分はこれです

listeners:{
    itemcontextmenu:function(view,record,item,index,e){
      e.stopEvent();
      gridMenu.showAt(e.getXY());
    },
    containercontextmenu:function(view, e){
      e.stopEvent();
      gridMenu.showAt(e.getXY());
    }
...

このコードは、グリッドの viewconfig 内にネストされています。そのため、コンテキスト メニューがポップアップしたときに、行の選択解除をトリガーしたくありません。

編集

まあ、私は自分でやった。追加されたばかりreturn false

if (event.button==0) allowSelection=true ;
else {
  allowSelection=false;
  return false;
}
4

2 に答える 2

1

これは、ブール値である変数をフラグとして使用し、グリッドにいくつかのアクション リスナーを使用することによって行われます。デフォルトでフラグを true に設定してください。そうしないと、最初は何も選択できなくなります。

allowDeselect: true,

次に、グリッドの 3 つのアクション、beforeitemclick、beforeitemcontextmenu、beforedeselect にリスナーを追加します。

this.control({
  'yourGridPanelsXtype': {
    beforeitemclick: this.onBeforeItemClickTheXtype,
    beforeitemcontextmenu: this.onBeforeItemContextMenuTheXtype,
    beforedeselect: this.onBeforeDeselectTheXtype,
  }
});

と聞き手

/**
 * this action listener sets allow deselect for all left clicks. The context
 * menu.. right click, blocks this event. This means its safe to assume that
 * it always gets fired on only left clicks.
 */
onBeforeItemClickSchedulerList: function() {
    this.allowDeselect = true;
},

/**
 * action listener that gets triggered before we display the context menu.
 * This function checks to see if the record we triggered the event on is
 * selected or not. if it is selected block deselecting records, or if it's
 * not selected, allow selection of the new record. Mimics OS behavior. We
 * assume that this event is always triggered with a right click.
 * @param view is the view that fired the event; the grid
 * @param record is the record that triggered the event
 */
onBeforeItemContextMenuSchedulerList: function(view, record) {
  var grid = this.getReferenceToYourGridFromRefs(),
      sm = grid.getSelectionModel(),
      selected = selectionModel.isSelected(record);

  this.allowDeselect = !selected;
},

/**
 * action listener for before the grid deselects something. This listener
 * checks the allowDeselect variable to see if we are blocking deselects or
 * not.
 * @return a boolean of weather to allow deselection or not.
 */
onBeforeDeselectSchedulerList: function() {
  if (!this.allowDeselect) {
    return false;
  }
},

これにより、現在選択されていないレコードを右クリックしたときに選択を解除できます。選択されているレコードを右クリックすると、選択解除がブロックされます。

于 2015-03-20T14:58:30.180 に答える
1

これは機能します

if (event.button==0) allowSelection=true ;
else {
  allowSelection=false;
  return false;
}
于 2013-11-09T09:29:20.770 に答える