2014-02-13 92 views
0

我使用Worklight框架爲IOS構建移動應用程序,並使用Sencha Touch 2.3構建應用程序。將JSON對象映射到模型/商店

由於環境的原因,我無法在Sencha Touch Store/Model對象中使用代理從服務器加載數據,因爲我需要使用Worklight的適配器來檢索信息。我已經設法使用一些樣板代碼來做到這一點。

但是,我希望我可以更多地使用Sencha模型,並且正在考慮是否可以自動將JSON對象加載到Model對象中,而無需指定代理。

我目前正在做大量的循環和setter調用從JSON對象中的數據加載到一個模型,如下圖所示:

var profile = Ext.create('Profile', { 
Id: rawProfile.Id, 
Name: rawProfile.Name 
Age: rawProfile.Age 
..... 
} 

其中rawProfile是JSON對象我從服務器加載。

任何方式,我可以讓這個更清潔?

回答

1

您可以創建一個Model類,它將包含rawProfile對象中包含的數據。

Ext.define('MyModel', { 
    extend: 'Ext.data.Model', 
    fields: [{ 
     name: 'Id', 
     name: 'Age', 
     ... 
    }], 
    proxy: { 
     type: 'memory', 
     reader: 'json' 
    } 
}); 

我還設置了一個內存代理,它將讀取json對象。

然後,您可以創建一個Store,它將使用您定義的模型和內存代理(這意味着您不會在ajax消息傳遞中使用Ext的內部版本)。

Ext.create('MyStore', { 
    model: 'MyModel', 
    autoLoad: false 
}); 

將autoLoad設置爲false,因爲您希望從其他來源獲取數據。 因此,一旦你有了你的json對象,你可以通過調用store.loadRawData(jsonObject)將它加載到商店中。

在這種情況下,jsonObject將是包含從服務器返回的所有json對象的對象,這意味着您的代碼不必處理遍歷記錄,並且可以將其留給Sencha類。 但是,您需要找出寫回數據的服務器。

我建議通過Sencha Data Package tutorial運行,因爲它提供了一個很好的介紹,以數據包

+0

謝謝,會試試看 – ipohfly

0

如果所有的字段映射1:1的JSON對象,你可以這樣做:

var profile = Ext.create('Profile', rawProfile); 

或者(或者爲了避免要調用的字段的轉換函數),您可以直接在創建的模型上設置數據屬性。

var profile = Ext.create('Profile'); 
profile.data = rawProfile; 

同樣,這需要1:1的字段和json對象。