2014-07-08 227 views
0

在我開發一個應用程序,我需要使用相同的空間根據上一個TreeView被選擇的項目在網格中顯示來自不同格式不同來源的信息。最佳實踐/數據源

我發現兩種方法來實現這一目標:

  1. 找到那麼,網格摧毀和重建。
  2. 找到那麼,網格改變datasoruce /選項/

我很新的劍道,所以我不知道它的做法是明智的。

什麼建議嗎?

回答

2

問題的答案取決於你的使用模式。

  1. 你在多少次數據源之間切換?
  2. 獲取新數據需要多長時間?
  3. 涉及多少數據?

如果需要很長的時間,你可以經常切換數據源之間的我會說是有幾個網格,只有一個可見第三種辦法去,如果有大量的參與,那麼你應該銷燬數據的網格和重新創建一個新的避免使用大量的內存必須帶來大量的數據來回。

你可以用你的第二個提案(轉換數據源)去,如果你切換數據和電網的結構是完全一樣的(相同的列和格式)。

0

如果所有的數據有相同的列和選項,然後我只需調用.setDataSource()對電網部件更換用新的數據源。

但是如果要更改的選項和列,我認爲這將是最好只摧毀窗口小部件並重新創建它,這將消除小部件持有任何的舊選項的可能性。例如:

function replaceGrid(selector, options) { 
    var $grid = $(selector); 
    var gridWidget = $grid.getKendoGrid(); 
    if(gridWidget) { 
     gridWidget.destroy(); 
    } 
    $grid.kendoGrid(options); 
} 
+0

如果網格會經常變化?摧毀和重建需要很長時間嗎?也許@OnaBai的隱藏或展示方法更可取? – jajdoo

+0

小部件的銷燬/創建不是非常耗時。 DOM操作和元素創建很耗時。如果換出整個數據源,那麼小部件需要刪除所有元素並重新創建它們,因此調用一個小部件上的.setDataSource()和銷燬重新創建小部件之間的性能區別應該是關於同樣的(幾毫秒內我猜)。您可以將所有網格保留在DOM中,並隱藏/顯示它們,這將非常快速,但會使用更多的內存來將數據和元素保存在內存中。 – CodingWithSpike

+0

@jajdoo,我會隱藏並顯示它是否在兩個網格之間切換,因爲沒有時間上的懲罰(網格實際上只是沒有顯示),但請記住,這將會增加內存量兩個網格對象同時存在,但如果數據量非常大,並且您不應該創建數據源,則這可能只是不好的。 – OnaBai