2016-01-08 1 views
2

Я использую пользовательский шаблон ячейки, чье поле связывается с выражением функции. Данные ячейки привязываются к объекту с несколькими ключами. Я использую настраиваемую функцию, которая возвращает строку в шаблон ячейки столбца.Редактирование и фильтрация проблем в пользовательских шаблонах ячеек в сетке пользовательского интерфейса

Теперь есть две проблемы, с которыми я столкнулся после выполнения этой реализации.

  1. Фильтрация не работает в этой конкретной ячейке.
  2. Существует угловая ошибка при переходе на режим редактирования для этой ячейки:

Error: [ngModel:nonassign] Expression 'row.entity'getDisplayTitle'' is non-assignable. Element: 'getDisplayTitle'" class="ng-pristine ng-untouched ng-valid ng-scope">

я копировал эту проблему с помощью plunker.

Plunker - UiGrid

var app = angular.module('app', ['ngTouch', 'ui.grid', 'ui.grid.edit']); 

    app.controller('MainCtrl', ['$scope', function ($scope) { 
     $scope.getDisplayTitle = function (rowEntity, column) { 
      var displayTitle = ""; 
      if (rowEntity[column] !== null) { 
       if (rowEntity[column].length > 1) { 
        for (var i = 0; i < rowEntity[column].length; i++) { 
         displayTitle = displayTitle + rowEntity[column][i].street + "; "; 
        } 
       } 
       else if (rowEntity[column].length == 1) { 
        displayTitle = rowEntity[column][0].street; 
       } 
       else 
        displayTitle = rowEntity[column].street; 
      } 
      else { 
       displayTitle = ""; 
      } 
      return displayTitle; 
     } 
    $scope.gridOptions = { 
      enableSorting: true, 
      enableFiltering:true, 
      columnDefs: [ 
       { name:'firstName', field: 'first-name' }, 
        { 
       name:'address', 
       field: 'getDisplayTitle()', 
       cellTemplate : '<div class=".ui-grid-cell-contents"> {{grid.appScope.getDisplayTitle(row.entity, col.colDef.name)}} </div>'}, 

      , 
       { name:'1stFriend', field: 'friends.name' } 

      ], 
      data : [  { 
           "first-name": "Cox1", 
           "friends": {name:"ritesh"}, 
           "address": [{street:"ritesh1", city:"Laurel", zip:"39565"},{street:"puneet", city:"Laurel", zip:"39565"},{street:"kavleen", city:"Laurel", zip:"39565"},] 

          },{ 
           "first-name": "Cox2", 
           "friends": {name:"puneet"}, 
           "address": [{street:"ritesh2", city:"Laurel", zip:"39565"},{street:"puneet", city:"Laurel", zip:"39565"},{street:"kavleen", city:"Laurel", zip:"39565"},] 

          },{ 
           "first-name": "Cox3", 
           "friends": {name:"kavleen"}, 
           "address": [{street:"ritesh3", city:"Laurel", zip:"39565"},{street:"puneet", city:"Laurel", zip:"39565"},{street:"kavleen", city:"Laurel", zip:"39565"},] 

          },{ 
           "first-name": "Cox4", 
           "friends": {name:"alankar"}, 
           "address": [{street:"ritesh4", city:"Laurel", zip:"39565"},{street:"puneet", city:"Laurel", zip:"39565"},{street:"kavleen", city:"Laurel", zip:"39565"},] 

          } 
         ] 
      }; 

}]); 

Благодаря

ответ

0

Проблема связана с этой строки:

field: 'getDisplayTitle()', 

Это говорит к сетке, что значение должно быть найдено внутри rowEntity.getDisplayTitle() [Осторожно, что это не указывает на $scope.getDisplayTitle(), поэтому я думаю, что он не будет работать так, как вы надеялись].

Но как вы можете видеть, getDisplayTitle() является функцией, и вы не можете присвоить значение функции:

getDisplayTitle() = foo; // This is not a valid expression in javascript 

Таким образом, вы должны поставить свойство вашей строки объекта внутри field и вы найдете это значение обновляется после завершения редактирования пользователем.

+0

Можете ли вы, пожалуйста, помочь мне разрешить это, используя пример plunker ... Спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^