2013-04-26 87 views
0

我已經到了我的應用程序中的一個地方,我無法決定應該使用哪種類型的JSON結構。我的應用程序有像下面多重嵌套視圖 -使用backbone和json

-pageView 
    -sectionView 
     -articleView 
      -widgetView 
    -sectionView 
     -articleView 
      -widgetView 
      -widgetView 
     -articleView 
      -widgetView 

目前我使用的是包含在一個所有的瀏覽量,而在另一個所有sectionViews ......等單JSON文件。這是因爲我嚴重依賴Backbone Collections來對我的模型進行排序並呈現每個視圖。但顯然,對於這種類型的結構,我只是爲了頁面視圖而進行四次抓取。 (這甚至不是我的應用程序)。我在我的應用程序的開始處獲取所有這些內容,因爲它們是搜索工具所需的並顯示完成狀態。每個模型都知道它是父級,這就是它可以被插入到父級容器中的方式。

在另一方面,我可以用一個大的嵌套的JSON文件,其中包含一切,會是這個樣子:

{ 
    "page":"page_05", 
    "title":"Title of page", 
    ... 
    "sections":[ 
     { 
      "section":"section_05", 
      "title":"section title", 
      "articles":[ 
       { 
        "article":"article_05", 
        "title":"article title", 
        "widgets":[ 
         { 
          "widget":"widget_05", 
          ... 
         } 

        ] 
       } 
      ] 
     }, 
     { 
      "section":"section_10"    
      ... 
     } 

    ] 

我不介意,我構建它,因爲我可以簡單地把我的數據哪種方式在收藏。這似乎有點奇怪,必須編寫函數,如果我使用單個JSON文件,Backbone抓取已經做到了這一點。我想我問的是......有沒有人遇到過這個問題,以及解決方案是什麼?任何想法或演示都是一如既往的歡迎。提前致謝。

回答

2

如果我可以嘗試和概括,你的問題是理想的數據格式(一個巨大的響應)似乎不適合Backbone在模型和集合上使用fetch的方案。這對Backbone來說並不罕見,因此Backbone有一個內置的解決方案:parse

Backbone.CollectionBackbone.Model都有一個parse方法,默認情況下它什麼也不做。但是,你可以重寫它來添加的任何來自於fetch回電定製的響應處理,如:

parse: function(originalGiantResponse) { 
    someModel.set(originalGiantResponse.someModelPart); 
    someCollection.add(originalGiantResponse.someCollectionPart); 
    return originalGiantResponse.mainPart; // use the "mainPart" of the response 
} 

通過使用一個或多個parse覆蓋你應該能夠使用任何結構服務器端你想要的JSON,並且仍然適合你想要的任何客戶端骨幹代碼結構。

+0

這聽起來很像我的問題。不過,我只是有一個想法。骨幹保存讓我可以保存我的藏品,不用大驚小怪。如果我沿着你提到的路線走下去,我將如何將我的藏品保存回一個大的JSON文件中? – darylhedley 2013-04-26 21:22:18

+1

您可以重寫collection.sync以執行任何您想要的操作。更好的方法是使用內置骨幹行爲並在添加項目時調用collection.create(model),並將model.save綁定到適用於您的應用程序的任何事件。 – 2013-04-27 02:24:50