我有一个带有ui-grid-cellnav指令的可编辑Uigrid,可以在焦点上进行编辑。我还有一个过滤器,用于在下拉列表中显示值而不是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' }
] }
];
每当修改下拉列值时都会发生错误。看起来filter参数是作为字符串而不是实际对象传递的,但不确定原因。如果我删除cellnav指令,则工作正常。
提前致谢!
答案 0 :(得分:1)
有趣的是,我玩了一下它看起来你得到了想要的结果,偶尔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;
};
});