【问题标题】:Working with backbone and json使用主干和 json
【发布时间】:2013-04-26 20:31:33
【问题描述】:

在我的应用程序中,我无法决定应该使用哪种类型的 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 已经执行此操作时,必须编写将执行此操作的函数似乎有点奇怪。我想我要问的是......以前有没有人遇到过这个问题以及解决方案是什么?一如既往地欢迎任何想法或演示。提前致谢。

【问题讨论】:

    标签: json backbone.js backbone-views


    【解决方案1】:

    如果我可以尝试概括一下,您的问题是理想的数据格式(一个巨大的响应)似乎不适合 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 使用任何结构,并且仍然使其适合您想要的任何客户端主干代码结构。

    【讨论】:

    • 这听起来像是解决我的问题的方法。然而我只是有一个想法。 Backbone save 让我可以毫不费力地保存我的收藏。如果我沿着你提到的路线走,我如何能够将我的收藏品保存回一个大的 JSON 文件?
    • 你可以覆盖 collection.sync 来做任何你想做的事情。更好的方法是使用主干内置行为并在添加项目并将 model.save 绑定到对您的应用程序有意义的任何事件时调用 collection.create(model)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多