2016-10-14 38 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我們的情況下,CTRL),但UI網的範圍,所以我改名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'; 
} 

這裏你打算在兩種情況下返回字符串變量,它們將總是作爲布爾值求值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