Angularjs 天然气电网的当量是多少;s";在选择更改之前“;在ui网格中?

Angularjs 天然气电网的当量是多少;s";在选择更改之前“;在ui网格中?,angularjs,ng-grid,angular-ui-grid,Angularjs,Ng Grid,Angular Ui Grid,在ng grid中,我使用在选择之前更改,方法如下: 当用户选择一行时,将执行一个ajax调用。当ajax调用发生时,我设置$scope.doingAjaxCall=true,为了防止用户更改选择,我在网格定义中使用了以下内容: beforeSelectionChange: function () { return !($scope.doingAjaxCall); }, 如果发生ajax调用,它将锁定/冻结选择 现在,在ui网格(又称ng网格3)中,我不知道在选择更改后的等价物是什么

ng grid
中,我使用
在选择之前更改
,方法如下:

当用户选择一行时,将执行一个ajax调用。当ajax调用发生时,我设置
$scope.doingAjaxCall=true
,为了防止用户更改选择,我在网格定义中使用了以下内容:

beforeSelectionChange: function () {
    return !($scope.doingAjaxCall);
},
如果发生ajax调用,它将锁定/冻结选择

现在,在
ui网格(又称ng网格3)中,我不知道在选择更改后
的等价物是什么

在本节文档中:

我看到两件事:

  • rowSelectionChanges
  • rowSelectionChangedBatch
这些似乎相当于旧的
afterSelectionChange

在本节文档中:

我看到这两种方法似乎与需求相关:

  • raiseselection事件(网格、changedRows、事件)
  • deciseraiseselectionevent(网格、行、changedRows、事件)
但我不知道如何使用它们

重要提示:

我正在使用
multiSelect:false
(即:只能选择一行)

这有点麻烦,但在找到更好的解决方案之前,它会完成工作。这是一张工作票

我假设您使用
rowSelectionChanged
执行AJAX调用并切换
doingAjaxCall

gridApi.selection.on.rowSelectionChanged($scope, function(row) {
  $log.log('Row ' + row.entity.id + ' selected: ' + row.isSelected);

  $log.log('  Simulating ajax call...');
  $scope.doingAjaxCall = true;
  $timeout(function() {
    $log.log('  ...done with ajax call');
    $scope.doingAjaxCall = false;
  }, 2000);
});
然后,修改ui网格用于选择按钮的模板

$templateCache.put('ui-grid/selectionRowHeaderButtons',
  '<div ' +
  '  class="ui-grid-selection-row-header-buttons ui-grid-icon-ok" ' +
  '  ng-class="{\'ui-grid-row-selected\': row.isSelected}" ' +
  '  ng-click="grid.appScope.clickConditions() && selectButtonClick(row, $event)"> ' + // Modified template here
  '  &nbsp; ' +
  '</div>'
);
正如我提到的,这是非常黑客!有更好的方法来覆盖模板(例如,
ui网格/selectionRowHeaderButtons
),当覆盖模板时,您可能需要让用户知道在执行AJAX调用时,在视觉上发生了一些事情,等等


一个更好的解决方案是在选择更改逻辑(可能是开始)之前进行回购并添加您自己的
。但似乎你在其他地方没有得到太多帮助,所以希望这至少能让你开始

ui-grid提供了实现这一点的工具,我不确定是否有“ui-grid”方法,但肯定有兼容的方法

根据您的描述,我假设您只允许单个选择,因为如果您允许多个选择,他们可以继续添加选择,并且您可以在后台运行ajax。所以我假设您正在设置
multiSelect:false
per

我可以通过两种方式获得结果:

  • 如果用户在运行ajax调用时试图选择一行,请将选择设置回原来的位置。这意味着您必须侦听selectionChanged和selectionChangedBatch事件,跟踪所需的选择,并跟踪ajax调用的进行时间

  • 使用
    isRowSelectable
    函数,该函数在运行ajax调用时不允许选择任何行。该函数本身与使用ng grid时的函数类似,即
    return$scope.doingAjaxCall
    。不同之处在于,无论何时更改
    $scope.doingAjaxCall的值,都需要调用
    notifyDataChange
    。从内存中,使一行不可由用户选择仍将允许它在代码中被选择-因此这不会改变该行被选择的情况

  • 我可能会选择第二种选择

    按要求添加信息:
    isRowSelectable
    如上文所述,在教程中(有一个示例说明了它的工作原理)。唯一的诀窍是,我感觉它只会在特定事件上重新计算,因此当您更改
    doingAjaxCall
    变量时,它可能不会自动从每个项目中删除select。因此,我建议调用
    notifyDataChange
    ,这也在教程中


    我建议你尝试一下,如果你有困难的话,我可以给你一些建议。我现在没有时间从头开始写它。

    可惜没有一个对等的。如果没有这个,我无法从ng网格移动到ui网格…这方面有什么新闻吗?1年后?但是不同的网格将共享
    $scope。单击Conditions
    ,即使其中一个正在触发ajax调用。抱歉,但我更喜欢寻找官方的ui网格方式:(-已经有一些函数(
    decideRaiseSelectionEvent
    ,等等),但文档中不清楚如何使用它们……是的,我使用的是
    multiselect:false
    (将立即使用该信息编辑原始问题)您能为第二个选项提供一个示例代码吗?我不清楚
    isRowSelectable
    是否属于
    ui网格
    。我已按要求添加了内容。@paul关于这一点,我想将ui网格中的选择限制为10。如何实现这一点?
    $scope.clickConditions = function() {
      // Check for any other conditions you need
      return !$scope.doingAjaxCall;
    };