2016-10-14 4 views
1

데이터의 플래그를 기반으로 편집 가능/편집 불가능 행을 설정하려고합니다. 이 기능은 1.5 각형 구성 요소 외부에서 작동하지만 구성 요소의 컨트롤러 내부에서 row.entity에 액세스 할 수 없습니다.각도 1.5 구성 요소 내부의 ui-grid에서 editableCellCondition을 설정합니다.

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 

참고로 해당 함수에서 수신 한 매개 변수는 현재 컨트롤러의 이 아닙니다. (y

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

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 
    }; 

} 

, 나는 당신의 댓글을 달았습니다 코드를 참조하십시오 Ctrl 키), 그러나 UI 그리드의 범위로 우리의 경우는, 그래서 Ctrl 키 범위 로 변경

여기서 항상 문자열 변수를 반환하려는 경우 두 가지 경우 모두 항상 부울로 평가됩니다. 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