2016-10-14 5 views
1

Я пытаюсь установить строки редактируемые/не редактируемые на основе флага в данных. Я могу заставить это работать вне углового компонента 1.5, но, похоже, не может получить доступ к row.entity внутри контроллера в компоненте.установка editableCellCondition в ui-сетке внутри углового компонента 1.5

function memberDisplayCtrl ($scope, memberFactory,uiGridConstants) { 
    var ctrl = this; 
    ctrl.people = memberFactory.getMembers(); 

    ctrl.checkStatus = function(ctrl){ 

     // How do I do something like this: 
     // if (ctrl.row.entity.Status === 'Y') { return 'true'; } else {return 'false';} 
    }; 

    ctrl.gridOptions = { 
     enableSorting: true, 
     enableCellEdit:false, 
     cellEditableCondition: ctrl.checkStatus(ctrl), 
     enableHorizontalScrollbar : 0, 
     enableVerticalScrollbar : 0, 
     enableColumnMenus: false, 
     minRowsToShow: ctrl.people.length, 
     columnDefs: [ 
      { displayName:'First Name', name: 'fname', enableCellEdit:true }, 
      { displayName:'Last Name', name: 'lname', enableCellEdit:true }, 
      { displayName:'Date of Birth', name: 'DOB', type:'date', enableCellEdit:true, cellFilter: 'date:"yyyy-MM-dd"'}, 
      { displayName:'Address', name: 'address', enableCellEdit:true}, 
      { displayName:'Status',name: 'Status', enableCellEdit: true} 
     ], 
     data : ctrl.people 
    }; 

} 

Я уверен, что у меня проблема с прицелом, но, похоже, не могу понять это. Как мне получить доступ к row.entity? У меня есть изолированный объем внутри моего контроллера (поскольку он является частью компонента)

plunker здесь: https://plnkr.co/edit/Wz7gKs

Благодаря

ответ

0

просто передать функцию cellEditableCondition вместо выполнения его:

cellEditableCondition: ctrl.checkStatus 

и обратите внимание, что этот параметр, полученный этой функцией, не является токовым контроллером (aliased in y В нашем случае в качестве Ctrl), но объем щ сетки «s, так что я переименовал Ctrl в сфера:

function memberDisplayCtrl ($scope, memberFactory,uiGridConstants) { 
    var ctrl = this; 
    ctrl.people = memberFactory.getMembers(); 

    ctrl.checkStatus = function(scope) { 
     return scope.row.entity.Status === 'Y' 
    }; 

    ctrl.gridOptions = { 
     enableSorting: true, 
     enableCellEdit:false, 
     cellEditableCondition: ctrl.checkStatus, 
     enableHorizontalScrollbar : 0, 
     enableVerticalScrollbar : 0, 
     enableColumnMenus: false, 
     minRowsToShow: ctrl.people.length, 
     columnDefs: [ 
      { displayName:'First Name', name: 'fname', enableCellEdit:true }, 
      { displayName:'Last Name', name: 'lname', enableCellEdit:true }, 
      { displayName:'Date of Birth', name: 'DOB', type:'date', enableCellEdit:true, cellFilter: 'date:"yyyy-MM-dd"'}, 
      { displayName:'Address', name: 'address', enableCellEdit:true}, 
      { displayName:'Status',name: 'Status', enableCellEdit: true} 
     ], 
     data : ctrl.people 
    }; 

} 

также, я вижу свой комментировал код:

if (ctrl.row.entity.Status === 'Y') { 
    return 'true'; 
} 
else { 
    return 'false'; 
} 

здесь вы намерены вернуть строковую переменную в обоих случаях, которая всегда будет оцениваться как boolean true, вы должны возвращать логическое значение:

if (ctrl.row.entity.Status === 'Y') { 
    return true; 
} 
else { 
    return false; 
} 

который равен гораздо короче версии:

return ctrl.row.entity.Status === 'Y'; 

plunker: https://plnkr.co/edit/KXbJ40?p=preview

+0

Конечно, это, безусловно, сделал это. Спасибо! – MRenard

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

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