2015-10-19 50 views
0

我有一個綁定到RESTful API的kendo網格的Angular單頁應用程序。當這個數據在外部更新時,我有一個web套接字(PubNub)函數,我正在觸發它的目的是刷新並顯示外部更改的數據,同時保留網格的層次結構以及選定的行。如何更新Kendo-UI網格上的數據並使用Angular持久化層次結構選擇?

我可以獲取數據網格進行刷新,但這不會使用API​​中已更改的數據刷新數據源。如果我包含一個dataSource.read(),那麼它似乎阻止了我的層次結構的持久性,IE會關閉先前打開的分層網格。

我有一個試圖利用從Telerik的文檔示例所示爲該這裏列出:Persist expanded rows after refresh

vm.savestate = function(e) { 

     console.log('save pressed:'); 
     var grid = $scope.responseGrid; 
     var expanded = $.map(grid.tbody.children(":has(> .k-hierarchy-cell .k-minus)"), function(row) { 

      console.log(row); 
      console.log($(row).data("uid")); 
      return $(row).data("uid"); 

     }); 

     grid.one("dataBound", function() { 
      grid.expandRow(grid.tbody.children().filter(function(idx, row) { 
       return $.inArray($(row).data("uid"), expanded) >= 0; 
      })); 
     }); 

     grid.refresh(); 


    }; 

回答

1

的解決方案是相當簡單的實際。您不能使用uid,因爲這是在每個可讀數組的新讀取時生成的。正確的選擇是使用以下示例中的型號ID:

vm.savestate = function(e) { 

    console.log('save pressed:'); 
    var grid = $scope.responseGrid; 
    var expanded = $.map(grid.tbody.children(":has(> .k-hierarchy-cell .k-minus)"), function(row) { 

     console.log(row); 
     console.log($(row).data("uid")); 
     return grid.dataItem($(row)).EmployeeID; //Use Model Data instead of uid 

    }); 

    grid.one("dataBound", function() { 
     grid.expandRow(grid.tbody.children().filter(function(idx, row) { 
      return $.inArray(grid.dataItem($(row)).EmployeeID, expanded) >= 0;//Use Model Data instead of uid 
     })); 
    }); 

    grid.refresh(); 


}; 

感謝Telerik支持團隊爲此回覆。當需要dataSource.read()時,這是他們在Kendo-UI Grid的how to persist expanded rows after a refresh上的更新示例。

+0

我不確定是因爲我使用了不同的風格,還是事情從2015年到2017年發生了變化,但這對我而言並不適用。我必須將「.k-minus」更改爲「.k -i-collapse」,才能正常工作。 核心消息是整體概念有效,但您可能需要檢查應用於行的類以查找適用於您的代碼的類名。 –