2012-02-29 52 views
5

我有叫Member骨幹模型 - 這包含會員資料,如名字,姓氏,電子郵件,電話等,還包括多值字段我需要保持作爲集合 - 這是DegreesAffiliations如何正確實現在Backbone模型中解析以包含集合?

我在模型中調用fetch()方法時遇到的問題是,基本數組與我的模型中的集合對象之間存在阻抗不匹配。由於parse根據定義應該返回一個在set中使用的散列,而不是實際設置值,所以我不可能以這種方式設置我的集合。例如 - 如果我返回一個Degrees的JavaScript對象,如下所示:{degrees: [{id: 1, title: "PhD"}]},那麼這會將我的degree集合轉換爲平面數組。這裏是我的代碼:

window.Models.Member = Backbone.Model.extend({ 

    url: '/api/member', 

    initialize: function() { 

     _.bindAll(this); 

     this.set('degrees', new window.Collections.DegreesList()); 

     this.fetch(); 

    }, 

    parse: function(response) { 

     var setHash = {}; 

     setHash.first_name = response.first_name; 
     setHash.last_name = response.last_name; 
     setHash.office_phone = response.office_phone; 

     // When this is run, this.get('degrees') will now return a flat array rather than a DegreesList collection 
     setHash.degrees = _(response.degrees).each(function(item) { 
       return {id: item.id, title: item.title} 
     }); 

     return setHash; 

    } 

}); 

我可以手動設置我的解析函數的集合,但是,似乎是它顛覆主幹路,哈克。

編輯:我已經暫時通過以下操作解決了這個問題:

parse: function(response) { 

    var setHash = {}; 

    setHash.first_name = response.first_name; 
    setHash.last_name = response.last_name; 
    setHash.office_phone = response.office_phone; 

    this.get('degrees').reset(response.degrees); 

    return setHash;  
} 

我懷疑這是最佳的解決方案,但它肯定適用於現在。我願意提供更好的建議。

+4

試試這個:溝'解析:'函數(它不似乎並不需要),而是在'initialize:'中手動將'degrees'屬性從數組轉換爲Backbone集合... – 2012-02-29 00:40:52

+0

'fetch'方法返回後''parse'會自動調用。在調用fetch之後,我可以手動將'degrees'屬性重置回集合,但是我不會在該集合中包含任何我想要的數據...並且數據正在進入。 – rybosome 2012-02-29 03:15:56

+0

您將擁有如果手動將它們添加到'parse'中,可以使用'度數'來做很多事情。去@ŠimeVidas的建議,併爲他們使用Backbone集合。它讓你處理每個'度'的骨幹方式。 – sntran 2012-03-01 03:13:12

回答

2

我使用完全相同的解決方法,你提出的除了一些變化。

  1. 爲了避免誤解,我呼籲在JSON集合:degreesData
  2. initialize我創建集合是這樣的:this.degrees = new Degrees().reset(this.get("degreesData"));
+0

對於挖掘舊問題抱歉,但是如何從初始化中獲取degreeData?在實例化模型時初始化運行..degressData直到獲取後纔會填充,INSIDE初始化。 – raynjamin 2013-11-05 23:35:51

+0

@raynjamin我在初始化時填充的是'度數'集合,沒有'degreesData'屬性。 'degreesData'屬性是用來初始化模型的初始JSON的一部分,因此這個信息在'initialize()'中可用。 _(如果我沒有記錯的話)_ – fguillen 2013-11-06 09:24:18

+0

再次挖掘它,如果你需要初始化一個空模型呢?你將不得不開始編碼默認和東西。也許解析是一個更好的選擇,至少你(幾乎)保證在這一點上有數據。 – backdesk 2014-07-25 13:58:22

相關問題