2013-06-01 20 views
0

在我的應用程序中,我們想要使用綁定到dojo.store.JsonRestdijit.form.FilteringSelect,它會查詢一個非常大的名稱列表(大約100,000個名稱),因此我們需要商店的延遲加載功能的優勢。Dojo:在JSONP中使用RestStore

證明的概念代碼作品非常好:

var pmStore = new dojo.store.JsonRest({ 
    target: "/pm/", 
    idProperty: "cn" 
}); 

var pmFs = new dijit.form.FilteringSelect({ 
    id: 'pmSelector', 
    name: 'pmNamePicker', 
    value: 'default here', 
    store: pmStore, 
    searchAttr: 'fullName', 
    displayAttr: 'fullName', 

    onChange: function (person) { 
     // Look up and display some more details   
    } 
}, 'select'); 

的概念證明代碼位於同一個域中的RESTful服務,並且效果很好。但是,對於生產,查詢服務器將處於不同的域中,並且必須使用JSONP(由於絕對要求支持IE 7,CORS不是一種選擇)。

使用dojo.io.script,使用JSONP進行簡單查詢很簡單。

我們如何連接dojo.store.JsonRest以通過JSONP進行通信;還是有另一家商店這樣做?

我們仍在使用Dojo 1.6.1,但可以升級到任何不能替代構建工具的更高版本,因爲我們沒有用於新構建方法的自定義構建腳本,並且我們所有的遺留代碼使用dojo.require(...)語法,而不是新的AMD語法。

回答

0

我不認爲這可能與JsonRest商店,我不知道任何可以解決它的替代方案。

最好的解決方案可能是創建自己的商店(擴展JsonRest商店)並確保它使用jsonp。 另一種可能的解決方案是創建某種運行在同一個域中的服務器端代理。

UPDATE:這是因爲在1.6.1的dijit小部件中使用的道場/數據 API。然而,您定義了一個dojo/store商店。它錯誤地告訴我,它與之前的正常JsonRest商店,因爲你應該有同樣的問題。

爲您幸運Dojo提供了適配器以在2個API之間切換。試試這個:

new dojo.data.ObjectStore({objectStore: myJsonPstore }); 

你的myJsonPstore應該包含一個對你的商店的引用。

+0

你會認爲製作JsonRest的jsonp版本應該很容易......我們將會看到。 – SAJ14SAJ

+0

不應該很難。只有'get','put'和'query'應該改變。 https://github.com/dojo/dojo/blob/master/store/JsonRest.js – g00glen00b

+0

我有一個新的'JsonpReadRest'對象,但只需將調用替換爲xhrGet調用'dojo.io.script.get '留下錯誤,說'fetch'方法不被支持,我真的不知道應該在哪裏支持fetch方法。仍在挖掘。 – SAJ14SAJ