2015-06-03 24 views
0

我們正在使用dojo JsonRest。無論何時我們需要用新數據刷新網格,dojo都會觸發兩個服務器調用。爲什麼Dojo grid.refresh正在調用另一個服務器?

以下是代碼。

var MyJsonRest = declare(JsonRest, { 
    get: function(id, options) { 
     return this.inherited(
      arguments, 
      [id, lang.mixin(this.headers, options)]); 
    } 
}); 

myDataStore = MyJsonRest({ 
    target: someurl, 
    headers: { 
     'moduleUName': somemodulename 
    }, 
    idAttribute: "id", 
     query: function(query, options) { 
      // some other code      
     }     

}); 

myDataStore.get("", { paramName: paramValue }).then(function(result) { // this fires a request to server 
    gridObj.refresh(); // this fires same request 2nd time to the server 
    // if the gridObj.refresh() is commented out, then the grid does not displayes the new data. 
}); 

回答

0

爲了使電網檢測店裏的變化,而不會觸發刷新,你應該換你JsonRest店與dojo.store.Observable。然後任何對商店的更新都會在網格中自動更新。

myCacheDataStore = new Cache(myDataStore, new Memory({}); 
myObservableDataStore = new Observable(myCacheDataStore)  

您應該能夠通過myObservableDataStore來代替myDataStore。

要更新或刷新網格,您可以直接更改目標網址或更新myDataStore中的標題並調用grid.refresh。我還沒有頭的更新測試,但我的例子改變

/rest/users/ 

/rest/users/?username=jdoe 

目標URL和電網更新的罰款。

myDataStore.target = '/rest/users/?username=jdoe' 

也許

myDataStore.headers[paramName] = paramValue 
因爲

您MyJsonRest店混入提供到「得」到了頭以及選項。

+0

感謝您的回答。如何在可觀察值中包含上面的代碼? – yetanothercoder

+0

對不起,模糊的答案。我已經添加了一段代碼,假設您已經要求dojo/store/Observable – xangxiong

+0

我嘗試了你所說的。但它不工作。沒有錯誤。但是現在它不會顯示具有初始數據的網格。 – yetanothercoder

0

這個問題似乎比被接受的答案有更直接的答案(正如臨近結束時的評論所證明的那樣)。

您在您的商店打電話get,然後在該呼叫的成功處理程序內呼叫grid.refresh()。由於您使用的是基於服務器的商店,因此get本身會觸發一個請求。網格將發起另一個請求(通過商店的query方法)以獲取要自行填充的項目列表。

從您的示例中不清楚您最初打電話給get的另一個原因,但直接調用商店方法不會填充網格等小部件 - 小部件直接自己訪問商店。

相關問題