2012-08-26 56 views
0

我有一個使用ajax商店的樹面板。 當服務器獲取節點的結果時,通常不是即時的(需要幾秒鐘)。ExtJS 4奇怪的樹加載行爲

我有重新加載根節點另一個網格控制(取決於不同的參數)

這可能導致奇怪的行爲,當該前一個完成之前被髮送的請求:

  1. 用戶選擇在網格上,這會導致樹發送請求
  2. 以前的請求之前的東西是完整的用戶改變一些東西,導致一個新的請求被髮送
  3. 樹開始有問題,當在兩個請求完成後擴展節點

有沒有辦法讓我在重新加載樹之前中止樹存儲發送的所有掛起的請求?

在此先感謝您的幫助! Amitay。

P.S - ExtJS的版本4.1.1

+0

因此,樹的內容可能與不同的數據被重新加載,而在之前的數據服務器請求正在進行。這是你想要阻止的嗎?你能解釋爲什麼你重新加載根節點? – Izhaki

+0

這實際上是一個樹形網格(不是簡單的樹)。我將它用於我的應用程序中的儀表板,其中顯示了各種指標。感謝樹,用戶可以深入查看詳細的數據。當用戶選擇要顯示的度量標準時,應該重新加載樹來反映用戶的選擇。 當用戶選擇一些內容並在先前完成加載之前更改其選擇時,會發生此問題。 – amitayh

回答

1

將數據添加到樹商店是一個棘手的業務。爲了在每次將數據加載或加載到樹存儲中時保持對齊,框架會執行很多操作。作爲示例,嘗試將記錄添加到其他地方樹中已存在的樹存儲中。如果記錄的ID是持久的(意味着從服務器設置),那麼所有的記錄都會丟失。這是因爲樹木商店機器複雜,可能不適合所有用例。

因此,難怪如果兩個相互競爭的請求嘗試將數據加載到樹存儲中,情況將不會很好。 可以做些什麼?

  1. 加載蒙版。當樹分支展開時,加載蒙版應覆蓋樹以隱藏任何其他控件。這有助於避免併發數據操作。在4.1.1中,這實際上起作用了OOTB(之前被破解)。

  2. 如果您允許外部控件影響樹看「加載」屬性http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Store-property-loading。檢查加載應該防止其他操作繼續。如果需要的話,在數據連接上有一個'中止'方法來取消掛起的請求。

  3. 最後看看數據連接上的autoAbort屬性:http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Connection-cfg-autoAbort這會殺死所有其他未決請求,可能是您要查找的內容。

+0

嗨德米特里,謝謝你的回覆。 1。這將起作用 - 但我不想限制用戶。我寧願放棄樹發送的所有請求。我無法找到跟蹤這些請求的方法。 2.是的,我想要使用'abort'方法 - 但是,我找不到方法來訪問我要中止的請求!有什麼建議麼? 3.這將殺死所有請求,不是嗎? (不只是與樹木店有關的) 再次感謝您的協助,Amitay。 – amitayh