2011-07-21 77 views
2

這裏是一個兩部分問題。第一個是關於Sencha如何解析JSON並讀取商店的技術問題。嵌套的JSON和與Sencha Touch的關聯

我有兩個型號,訂單和用戶:

Ext.regModel('Order', { 
    fields: [ 
    {name: 'id', type: 'int'}, 
    {name: 'user_id', type: 'int'}, 
    {name: 'name', type: 'string'}, 
    {name: 'price', type: 'float'}, 
    ], 
    belongsTo: 'User' 
}); 

Ext.regModel('User',{ 
    fields: [ 
    {name: 'id', type: 'int'}, 
    {name: 'first_name', type: 'string'}, 
    {name: 'last_name', type: 'string'}, 
    {name: 'email', type: 'string'}, 
    ], 
    associations:[ 
    {type: 'hasMany', model: 'Order', name: 'orders'} 
    ] 
}); 

總體而言,一個非常簡單的關聯。我有一個從服務器中檢索以下JSON:

[ 
    { 
    "id":22, 
    "price":0.0, 
    "name":"My First Order", 
    "user_id":3, 
    "user": { 
     "id": 3, 
     "first_name": "Michael", 
     "last_name": "Jones", 
     "email": "[email protected]" 
    } 
    } 
] 

最後,這裏是我的商店:

var o = new Ext.data.Store({ 
    model: "Order", 
    sorters: "name", 
    getGroupString: function(record){ 
     return record.get('name')[0] 
    }, 
    proxy: { 
     type: 'ajax', 
     url: '/orders', 
      headers: {'Accept': 'application/json'}, 
      reader: { 
      type: 'json' 
      } 
    }, 
    autoLoad: true 
}); 

Ext.regStore("Orders",o); 

當我看到訂單數據,我無法找到該用戶的任何提及。因此,我在Sencha文檔中找到了這個方便的指南:http://dev.sencha.com/deploy/touch/docs/?class=Ext.data.Reader

但是,文檔僅顯示hasMany關聯的示例 - 它不包含從belongsTo關聯中提取數據的一個示例。我試圖在網上搜索幾個小時,然後空手而去。從訂單字段中檢索用戶字段的正確方法是什麼?

更新:我在我的商店移除代理和自動加載參數和數據參數,其中載有我的服務器在我的例子返回的JSON的完全相同的字符串替換它。你猜怎麼着?有效。但是,我仍然需要解決這個問題,以便它能在與我的服務器通信時工作!有任何想法嗎?

第二部分:您對Sencha Touch有什麼想法?該框架似乎非常強大,但文檔和示例似乎相當薄弱。我也擔心解析這些數據的困難程度如何。那裏有更好的選擇嗎?

回答

1

我對Sencha相當陌生,不能回答你的問題本身,但既然你說它的工作原理當你直接加載數據,解決方法可能是得到一個普通的Ext的JSON對象.Ajax.request()然後使用o.loadData(theData)。

另外,你見過這個http://dev.sencha.com/deploy/touch/docs/?class=Ext.data.BelongsToAssociation

至於你的第二個問題,Sencha的文檔顯然可能會更好,但是與通常使用API​​的狗屎相比,我認爲它實際上相當不錯 - 發現難以理解的配置選項是你不得不做的事情你選。

我真的很喜歡它的風格+動畫;我知道那裏沒有什麼東西具有相同水平的「哇因素」;如果你沒有找到一個優雅的解決方案,我認爲這是值得編寫你自己的數據解析器。客戶不會購買/使用產品,因爲代碼非常優雅,或者數據結構非常強大;他們購買它們是因爲它們時髦或使用時髦的應用程序呈現。

SASS + Compass集成也使得自定義樣式比普通CSS容易得多。

最後,我不知道你是否需要這個,但我一直在使用Sencha的「TouchCharts」的alpha(我認爲在未來幾個月內發佈),這是非常令人印象深刻的;動畫圖表(easing),與數據序列(項目點擊,比較項目,縮放)的交互以及圖表自動更新(如數據視圖)。

+0

感謝您的幫助。使用簡單的Ext.Ajax.request對象並將數據加載到商店中效果很好。我擔心我是否按照預期使用了這些工具,但我猜無論什麼作品都適用。感謝您對Sencha Touch平臺的反饋。我很欣賞這個平臺的類似特質。我認爲處理這個數據加載問題只是令人沮喪,因爲它看起來像我一切正常。如果修復引起其他一些問題,我會回信。 –

0

我遇到了同樣的問題。問題有多個潛在答案。

我能夠通過指定例如

hasMany: [ 
    { associatedName: 'collectionfield', model: 'collectionmodel'} 
] 

而且由於某種原因,我不得不範圍模型app.model.collectionmodel

{ 
    id: '1' 
    q: 'Foo?', 
    answers: [ 
    { id: 8, assessment_question_answer_id: '1', text: 'bar'}, 
    { id: 9, assessment_question_answer_id: '1', text: 'baz'}, 
    { id: 10, assessment_question_answer_id: '1', text: 'steve'}, 
    ] 
} 


Ext.define('Hk.model.AssessmentQuestion', { 
... 
    hasMany: [ 
    { associatedName: 'answers', model: 'Hk.model.AssessmentAnswer'} 
// ... and then 

Ext.define('Hk.model.AssessmentAnswer', { 
... 
    belongsTo: {model:'Hk.model.AssessmentQuestion', foreignKey: 'assessment_question_id'} 
相關問題