2013-07-18 75 views
2

在我的網絡應用程序中,我有2個網格。第二個綁定到第一個網格selectedItems,這是工作正常。問題是我想獲得第二個網格中的元素列表(理想情況下,應用於數據中反映的第二個列表中的任何排序),以便我可以將更改提交到數據庫。如何從網格獲得當前數據

所以,問題是我怎麼能訪問第二網格中的數據,如果我嘗試:

surveyModel.surveySelectedSectionsGrid.data 

我回去,我用來設置網格選項字符串它說:

surveyModel.surveySectionGrid.selectedItems 

我想要的是用於第二個網格的實際數據模型。

這裏是我的兩個網格選項定義:

surveySectionGrid: { 
     data: 'surveyModel.surveySections', 
     multiSelect:true, 
     selectedItems:[], 
     showFilter:true, 
     columnDefs: [ 
       { field: 'name', displayName: 'Questions/Sections' }, 
       { field: 'sectionTypeDescription', displayName: 'Section Type' }, 
       { displayName: 'Edit', 
        field:'sectionId', 
        cellTemplate:'<div class="ngCellText" ng-class="col.colIndex()"><span ng-cell-text><button ng-click="gotoEditSection(row.getProperty(col.field))">Edit {{row.getProperty(col.field)}}</button></span></div>' 
       } 
       ] 
    }, 
    surveySelectedSectionsGrid: { 
     data: 'surveyModel.surveySectionGrid.selectedItems', 
     multiSelect:false, 
     selectedItems:[], 
     showFilter:true, 
     columnDefs: [ 
       { field: 'name', displayName: 'Selected Sections for Survey' } 
       ] 
    } 

一些可能的想法,我已經遇到

網格的rendereredRows屬性是具有對應於我的原創要素實體對象的數組。在數據中,但基於數組的名稱,它聽起來像是元素不在屏幕上,他們不會出現在這個列表中。

我發現作爲臨時解決方法我可以在我的輔助網格上調用selectAll(true),然後使用selectedItems數組,然後調用selectAll(false),但更直接的解決方案將會很好。

回答

1

編輯:能夠確認OP的問題與this plnkr。如果所有元素都在ng網格對象上可見,則renderRows將具有正確數量的元素。否則,renderRows將有< gridOptions.data.length對象來節省內存。

網格的renderRows對象應該是你要找的。它具有當前以HTML形式呈現的所有對象(包括那些在屏幕外的數據)傳遞給ng-grid對象的數據數組。

來源:我修改了ngGridCsvExportPlugin以僅包含過濾項目。我使用了renderRows對象,它像一個魅力一樣工作。編輯:少於20個元素,它運作良好。除此之外,這個解決方案崩潰了,最好的解決方案似乎是使用selectAll。

希望這有助於

布倫特

+0

嗨布倫特感謝您的答覆,我擔心的是,電網做「虛擬化」,我相信,如果有超過50個項目,然後他們不是所有的渲染(我在代碼中的某個地方看到了這個數字,以便開始虛擬化)。您是否偶然使用了超過50行的渲染行? – shaunhusain

+1

我沒有(我的用例有<20元素)。 我剛寫了一個plnkr來測試超過50個元素,看起來你是對的 - 通過添加一個調試行來打印出每個行選擇時的$ scope對象,我能夠確認只有16個將50個元素加載到renderedRows對象中。 http://plnkr.co/edit/QD6gIg?p=preview –

+0

@shaunhusain,有點晚了,但[檢查了這一點](http://comments.gmane.org/gmane.comp.lang.javascript.angularjs/ 3778)。似乎有一個選項可以提高虛擬化行數的閾值。默認值爲50,但您可以將GridOptions對象中的virtualizationThreshold變量設置爲您需要的任意數字。看起來它會影響性能,但它可能會使渲染成爲可行的選項。 –