使用单元格导航在 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 指令,工作正常。

Plnkr

提前致谢!

有趣的是,我试了一下,看起来你得到了想要的结果,只是偶尔 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;
     };
 });