我已经在我的应用程序中找到了一个点,我无法确定应该使用哪种类型的JSON结构。我的应用程序有多个嵌套视图,如下所示 -
-pageView
-sectionView
-articleView
-widgetView
-sectionView
-articleView
-widgetView
-widgetView
-articleView
-widgetView
目前我正在使用单个JSON文件,其中包含一个中的所有pageViews以及另一个中的所有sectionViews ...依此类推。这是因为我非常依赖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 fetch已经执行此操作时,必须编写将执行此操作的函数似乎有点奇怪。我想我要问的是......有没有人遇到过这个问题,有什么解决方案?任何想法或演示都一如既往地欢迎。提前谢谢。
答案 0 :(得分:2)
如果我可以尝试概括,你的问题是理想的数据格式(一个巨大的响应)似乎不适合Backbone在模型和集合上使用fetch
的方案。这不是Backbone的常见问题,因此Backbone内置了一个解决方案:parse
。
Backbone.Collection
和Backbone.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的任何结构,并且仍然使其适合您想要的任何客户端Backbone代码结构。