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
' ' +
'</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;
};