Ошибка при передаче параметра фильтра в Ugrid с навигацией по ячейкам

У меня есть редактируемый Uigrid с директивой ui-grid-cellnav, позволяющей редактировать фокус. У меня также есть фильтр для отображения значения вместо идентификатора в раскрывающемся списке.

<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

Заранее спасибо!


person Baga    schedule 12.10.2015    source источник


Ответы (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;
     };
 });
person jnthnjns    schedule 12.10.2015