2014-02-26 31 views
2

我想弄清楚如何根據行中的信息動態設置單元格上的enableCellEdit。例如,類似於:動態enableCellEdit

$scope.gridOpts = { 
    data: 'mydata', 
    columnDefs: [{field: 'sometimesIEdit', enableCellEdit:row.isEditable}] 
} 

明顯行在此上下文中不可用。也許enableCellEdit純粹是在列級而不是單元級進行評估,使我想做的事情變得不可能 - 我不確定。

我知道作爲解決方法,我可以使用帶ng-if的editableCellTemplate來顯示純文本,但我寧願單元格根本不可編輯。

回答

0

這是非常古老的,但我想我會試圖回答。我有這個完全相同的問題,並使用該列的editableCellTemplate解決它。這是我使用的模板是這樣的:

var editableCellTemplate = '<div class="email" ng-edit-cell-if="isFocused && ' 
    + 'row.entity.canEdit">' 
    + '<input ng-class="\'colt\' + col.index" ng-input="COL_FIELD" ' 
    + 'ng-model="COL_FIELD" />' 
    + '</div>' 
    + '<div ng-edit-cell-if="isFocused">' 
    + '<div class="ngCellText" ng-class="col.colIndex()"><span ng-cell-text>' 
    + '{{COL_FIELD}}</span></div>' 
    + '</div>' 
    + '</div>'; 

所以,只有當行實體canDevice等於true可以編輯該單元格。

0

另一種解決方法是修飾ng-grid的指令之一。 在這種情況下'ngCellHasFocusDirective'。

如果條件不符合,基本邏輯就是防止事件發生。

使用此方法,可以在行中另一個單元格發生更改時控制單元格的單元格編輯。 我記得當編輯行中的另一個單元格時,如果「CellTemplate」解決方案能夠正常工作,並且此編輯的結果應該禁用行中另一個單元格的單元格編輯。 這是因爲單元格更改激活單元格$ scope的$摘要,我不認爲$ digest是在$ scope行上觸發的。

在這個主旨鏈接下面我寫了一個裝飾的「ngCellHasFocus」指令,它大火「columnDef定義」,該函數返回TRUE或FALSE,編輯或不是一個函數。

的exapmle包括在內。 GIST :https://gist.github.com/shlomiassaf/7485c61ecb464f261194

0

老問題,但我們仍然需要用NG網(> = 2.0.9),以保持一個應用程序,我想我會回答

因爲它在文檔中說(https://github.com/angular-ui/ui-grid/wiki/Defining-columns)。 ,您可以在columnDef或Opti中指定cellEditableCondition: boolean ons對象。它還需要enableCellEdit: 'expression'

實施例從連桿提取上述

$scope.gridOptions = { 
    data: myDataSource, 
    enableCellSelection: true, 
    enableCellEditOnFocus: true, 
    cellEditableCondition: 'row.entity.editable', 
    columnDefs: [ 
    { field: 'firstName', displayName: 'First Name', width: "*", resizable: false, enableCellEdit: false}, 
    { field: 'lastName', displayName: 'First Name', width: "20%"}, 
    { field: 'address', displayName: 'Last Name', width: "*" , 
     cellEditableCondition: 'row.entity.editable && !row.entity.isAddressDefined()'}, 
    { field: 'age', cellClass: 'ageCell', headerCellClass: 'ageHeader', width: "**"}] 
}; 
1

對我來說,只有工作使用cellEditableCondition作爲函數的溶液:

cellEditableCondition: function ($scope) { return $scope.row.entity.isEditable }