使用单元格导航在 Uigrid 中传递过滤器参数时出错
Error when passing filter parameter in Uigrid with cell nav
我有一个可编辑的 Uigrid,带有 ui-grid-cellnav 指令以启用焦点编辑。我还有一个过滤器,用于在下拉列表中显示值而不是 id。
<div ui-grid="gridOptions" ui-grid-edit ui-grid-cellnav class="grid"></div>
JS
$scope.gridOptions.columnDefs = [
{ name:'name', width:100 },
{ name:'age', width:100},
{ name: 'gender', displayName: 'Gender', editableCellTemplate: 'ui-grid/dropdownEditor', width: '20%',
cellFilter: "griddropdown:this", editDropdownIdLabel:'id',
editDropdownValueLabel: 'gender', editDropdownOptionsArray: [
{ id: 1, gender: 'male' },
{ id: 2, gender: 'female' }
] }
];
每当修改下拉值时都会出错。过滤器参数似乎是作为字符串而不是实际对象传递的,但不确定为什么。如果我删除 cellnav 指令,工作正常。
提前致谢!
有趣的是,我试了一下,看起来你得到了想要的结果,只是偶尔 ui-grid
喜欢将字符串而不是对象作为参数传递。
如果您在过滤器中添加对字符串的检查,看起来您仍然会得到想要的结果,如果我理解正确的话:
要添加的字符串检查:
if (typeof context !== 'string') {}
完全过滤:
.filter('griddropdown', function() {
return function (input, context) {
if (typeof context !== 'string') {
var map = context.col.colDef.editDropdownOptionsArray;
var idField = context.col.colDef.editDropdownIdLabel;
var valueField = context.col.colDef.editDropdownValueLabel;
var initial = context.row.entity[context.col.field];
if (typeof map !== "undefined") {
for (var i = 0; i < map.length; i++) {
if (map[i][idField] == input) {
return map[i][valueField];
}
}
} else if (initial) {
return initial;
}
}
return input;
};
});
我有一个可编辑的 Uigrid,带有 ui-grid-cellnav 指令以启用焦点编辑。我还有一个过滤器,用于在下拉列表中显示值而不是 id。
<div ui-grid="gridOptions" ui-grid-edit ui-grid-cellnav class="grid"></div>
JS
$scope.gridOptions.columnDefs = [
{ name:'name', width:100 },
{ name:'age', width:100},
{ name: 'gender', displayName: 'Gender', editableCellTemplate: 'ui-grid/dropdownEditor', width: '20%',
cellFilter: "griddropdown:this", editDropdownIdLabel:'id',
editDropdownValueLabel: 'gender', editDropdownOptionsArray: [
{ id: 1, gender: 'male' },
{ id: 2, gender: 'female' }
] }
];
每当修改下拉值时都会出错。过滤器参数似乎是作为字符串而不是实际对象传递的,但不确定为什么。如果我删除 cellnav 指令,工作正常。
提前致谢!
有趣的是,我试了一下,看起来你得到了想要的结果,只是偶尔 ui-grid
喜欢将字符串而不是对象作为参数传递。
如果您在过滤器中添加对字符串的检查,看起来您仍然会得到想要的结果,如果我理解正确的话:
要添加的字符串检查:
if (typeof context !== 'string') {}
完全过滤:
.filter('griddropdown', function() {
return function (input, context) {
if (typeof context !== 'string') {
var map = context.col.colDef.editDropdownOptionsArray;
var idField = context.col.colDef.editDropdownIdLabel;
var valueField = context.col.colDef.editDropdownValueLabel;
var initial = context.row.entity[context.col.field];
if (typeof map !== "undefined") {
for (var i = 0; i < map.length; i++) {
if (map[i][idField] == input) {
return map[i][valueField];
}
}
} else if (initial) {
return initial;
}
}
return input;
};
});