2012-01-22 75 views
0

我有一個Dojo Datagrid綁定到啓用ClientFilter的JsonRestStore。 行爲我想:Dojo JsonRestStore和ClientFilter永遠不會從服務器更新

我每次調用過濾器上的數據網格,商店應在本地執行 查詢和更新電網。同時它也應該發送 相同的查詢到服務器,將它收到的數據添加到客戶端過濾的數據。

ClientFilter的文檔似乎說這是它應該如何工作。 這是行爲,我得到:

數據網格加載從服務器一旦數據,根據 初始過濾器設置。任何進一步的調用datagrid.filter只有 過濾客戶端上的數據。沒有更多的XHR呼叫服務器發送 。

我花了數小時調試ClientFilter.js尋找錯誤,但找不到它。我究竟做錯了什麼?

編輯:我想把這個放在這裏,所以希望有人尋找類似的信息不會卡住。 ClientFilter和JsonRestStore存在已知的問題。 與互聯網上的所有舊文檔相混淆,我正在使用dojo.data.JsonRestStore 這是一箇舊的且不受支持的(?)商店。 Dojo現在已經轉移到新的ObjectStore API。 實施這個新的API的最近的便利店是dojo.store.JsonRest和ClientFilter功能由dojo.store.Cache提供

+0

我想要的是,假設我是根據創建日期進行過濾。如果我減少過濾器,它應該在客戶端過濾並給我,但如果我增加過濾器的範圍,它應該從服務器得到更多的結果。這不是一個相當常規的東西嗎? – navjotk

+0

更多地解釋用例:我正在過濾來自Date和toDate的兩個字段。最初從日期= 2012-01-20和toDate = 2012-01-24。這讓我從服務器得到適當的結果。現在,如果我從日期更改爲2012-01-21,則商店將在客戶端上過濾數據集並顯示結果。這是必需的行爲。如果我從日期更改爲2012-01-19,則預期的行爲是商店從服務器請求更多數據。相反,商店僅返回緩存中的所有數據(其中不包括第19個數據) – navjotk

回答

1

可悲的是,在已緩存保持緩存dojox.data.JsonRestStore一切,你不能刷新的項目或查詢,據我所知。你可以試試clearCache(),如果你輕鬆地緩存它可能會工作。 否則,您將不得不深入JRS以根據您的需求實現真正的clearCache。 實現類似於你需要的東西,你可能連接的過濾器,並與未成年人除了像發出在商店非常相同的查詢「&日期=」 +(新的Date()。toString()方法) 什麼就像那樣強制刷新...... 不知道它會完全解決你的問題,除了第一個過濾器的快速加載之外,它將會破壞緩存的目的。 我甚至不確定強制查詢會更新你的數據網格......但你可以試試看。

+0

我的想法是使用緩存來顯示每個查詢的初始結果。爲了真正幫助人們,緩存必須大量使用,所以clearCache可能不是一種選擇。 – navjotk

+0

然後你可能想嘗試一下我所說的關於連接過濾器和發出一個新的獲取,添加一個日期/時間戳參數給它,以便你首先加載你的緩存,然後用fetch +日期刷新它,但是我從來沒有嘗試過:) – PEM

+0

我不確定這種方法可以工作,或者是因爲URL的GET參數在兩個請求之間做了更改(請參閱原始問題的評論)。我的問題不是瀏覽器緩存服務器的響應,而是商店不試圖從服務器獲取新數據(我使用Firebug來確保)。你認爲改變網址會有幫助嗎? – navjotk