【问题标题】:Backbone - Create Multiple Models in Collection - serversideBackbone - 在集合中创建多个模型 - 服务器端
【发布时间】:2012-05-28 09:44:22
【问题描述】:

我提供了一个表格供用户上传自己的数据。我使用 ajax-form-submit 然后解析数据以创建大量模型(上传的 csv 中每行一个)。

现在,我想将模型创建到预定义的集合中。

我可以使用 add 来获取模型数组,但不幸的是,它不会在服务器端发送 PUSH。我知道我可以为每个模型迭代和创建 .create 但假设我有 10k 个模型,它会创建 10k 个调用。听起来不合理。我错过了什么吗?

另一种方法是在服务器上接受多个模型并使用 .ajax 调用,然后手动添加到集合中以进行 UI 渲染。

寻找最佳路线。谢谢。

【问题讨论】:

    标签: backbone.js backbone-views backbone-routing


    【解决方案1】:

    Backbone 和 REST 根本无法涵盖所有​​实际用例,例如您的批量创建示例。他们也没有批量删除的官方模式,这也非常普遍。我对他们为什么拒绝解决这些极其常见的用例感到困惑,但无论如何,你在这里留给你自己的良好判断。所以我建议在你的收藏中添加一个bulkSaveimport 方法。这应该将带有 CSV 表单数据的 AJAX POST 请求发送到服务器,服务器应该保存信息,如果一切顺利,返回新创建的模型的 JSON 数组。您的集合应在 POST 响应中获取该 JSON 数组并将其传递给 reset(如果您需要特殊解析,也应将其传递给 parse)。

    绝对不要为每个模型(CSV 中的行)发出 POST 请求,尤其是当您计划拥有 10K 个模型时。但是,需要明确的是,如果您的 UI 显示基于每条记录的实时进度和错误处理(例如,保存了 65 个中的 23 个),那么为几十个模型执行该模式并不是完全糟糕的。

    【讨论】:

    • 听起来是最好的可行方法。我喜欢简单的 .post 并在成功循环中添加新模型。
    • Backbone 是一个很少有意见的框架,它试图尽可能地对大量受众有用。因此,标准对于主干很重要,并且由于批量删除不在REST spec 中,因此主干对如何处理批量操作进行任何假设几乎没有意义。
    【解决方案2】:

    我喜欢@PeterLyons 的务实方法,但另一个想法可能是尝试将您的 not REST 功能转换为 REST 功能。

    您想要的是一次创建一堆模型。 REST 不允许同时创建多个资源。 REST 喜欢一次创建一个资源。

    没问题,我们创建了一个新的资源调用Bulk,它有自己的 url 和自己的 POST 动词。此模型的attributes 是您要创建的模型数组。

    通过这种方法,您还可以同时解决未来的功能,例如修改删除多个模型。

    现在您只需要弄清楚如何将模型数组与这个新模型相关联,以及如何使Bulk.toJSON 方法正确响应。

    【讨论】:

    • 创建一个模型(作为要上传的模型数组的 json 数组数据)并调用保存的好主意。但问题在于另一端的编组。例如:在我的例子中,我们使用 Jersey 作为 REST 服务器,新模型发送一个 id 为 0(未创建),数据映射到 json 数组。所以,我们应该自定义实现一个解析器。最简单的方法是使用 .post,因为它消除了任何自定义反序列化。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    相关资源
    最近更新 更多