2011-09-11 117 views
1

我使用Backbone和我的RESTful JSON API來創建一個應用程序,可以處理文章及其評論。我一直試圖讓Backbone Relational工作,但遇到我的懶惰加載問題。骨幹關係惰性加載

我加載了一個帖子列表,沒有相關的評論。點擊列表中的帖子,我打開一個視圖,獲取完整的帖子,包括評論,並呈現這個。

我有2個Backbone.RelationModels,文章和評論。該職位有關的評論是設置爲folows:`

relations: [{ 
      type: Backbone.HasMany, 
      key: 'comments', 
      relatedModel: 'Comment', 
      includeInJSON: true, // don't include it in the exporting json 
      collectionType: 'Comments' 
     }] 

現在我面臨的問題是關係,只要我找回我的名單,不包含的評論初始化。稍後,我通過通過URI獲取模型來加載完整數據。但是,這些關係似乎沒有重新初始化,調用Posts.get(1).get('comments')返回一個空集的評論集合!

有誰知道我該如何最好的解決這個問題?數據在那裏,似乎收集的評論沒有得到更新。

編輯:我可以使Post模型綁定它的更改:對其本身的評論,它更新集合。但是,我似乎無法找到一個可靠的方式來獲取原始評論'JSON,因爲this.get('comments')返回Comments集合。

注:在我的收藏,我做解析JSON,使其與我的API的工作,用下面的代碼:

parse: function(response) { 
     var response_array = []; 
     _.each(response, function(item) { 
      response_array.push(item); 
     }); 

     return response_array; 
    } 

這是因爲我的API返回的JSON返回與索引鍵對象(關聯數組)而不是本機JSON數組。

{ 
    "id" : "1", 
    "title" : "post title", 
    "comments" : { 
     "2" : { 
      "id" : "2", 
      "description": "this should solve it" 
     }, 
     "6" : { 
      "id" : "6", 
      "description": "this should solve it" 
     } 
    } 
} 

非常感謝!請提出任何問題,我確定我的地方一直很模糊!

回答

3

Backbone Relational模型不解析數組之外的集合,我的問題中的JSON不起作用。我改變了後端返回的意見在適當的陣列

{ 
    "id" : "1", 
    "title" : "post title", 
    "comments" : [ 
     { 
      "id" : "2", 
      "description": "this should solve it" 
     }, 
     { 
      "id" : "6", 
      "description": "this should solve it" 
     }] 
    } 
} 

的RelationalModel不尊重解析功能骨幹提供它移動之前,解析您的JSON。通過後端返回「正確的」JSON,延遲加載不需要任何額外的代碼。

1

您還可以使用您的評論模型初始化方法,模擬解析方法和定義,像這樣的自定義值的屬性(CoffeeScript的):

initialize: (obj) -> 
    @attributes = obj.customKey