【问题标题】:Backbone.js custom rest routesBackbone.js 自定义休息路线
【发布时间】:2012-06-18 12:27:58
【问题描述】:

我是主干新手,在学习了一些教程应用程序后尝试了我的第一个应用程序。

我想知道完成以下任务的最佳方法是什么

在后端(导轨)

我有一个模型名称 Business,它是一个具有很多属性的复杂模型,它有一个关联地址 (has_one :address),还有一个头像和另一个个人资料图等等。

我希望能够从我的前端获取和更新业务资料的特定部分,假设我只想获取包含名称、类别和地址的 basic_info,而不是希望能够更新资料图片和头像。

我在主干中看到的是模型具有保存、更新、获取、销毁方法

如果我想要其他方法,例如 fetch_basic_infofetch_profile_pictureupdate_profile_picture 怎么办?针对这些,我希望相应地通知相关视图。

这是我想出来的

假设我想获取基本信息

  • 在主干模型中添加函数fetch_basci_info

    • 在此函数内部,使用$.ajax 向服务器发送自定义 ajax 请求
    • 手动触发事件"basicinfo:fetched"
  • 在我的路由器功能中

    • 创建模型对象
    • 创建一个新视图让我们说BasicInfoView 并将模型对象传递给它
    • 在视图内部绑定模型的偶数可以说model.bind('basicinfo:fetched', this.render)
    • 路由器初始化时调用model.fetch_basic_info(在路由器初始化中)

所以路由器被称为它创建视图绑定一个自定义事件并调用model.fetch_basic_info()请求发送到服务器返回响应(我是否手动调用set来设置骨干模型的属性)。之后触发自定义事件事件,通知视图并呈现自己

这是我第一个真正的主干应用程序,所以如果我正在做一些真正不碍事的事情,请阻止我。

您对此有何看法。

感谢您的阅读和反馈。

【问题讨论】:

    标签: ruby-on-rails-3 backbone.js


    【解决方案1】:

    您尝试做的不是非常 RESTful。如果您尝试这样做是为了节省资源或网络带宽,那么它几乎可以肯定是过早的优化 - 除非我们谈论成百上千个字段 - 在这种情况下会有更好的解决方案。

    事实是,仅获取个人资料图片所使用的资源与获取 50-100 个字段所使用的资源几乎相同。是的,数据稍微多一点,但考虑到网络连接中 90% 的工作、延迟、资源和等待时间来自建立连接,您实际上并没有节省那么多。

    在数据库端加上一个

    select * from businesses where id=123

    只用了一点点

    select profilepic from businesses where id=123

    因为这项工作最难的部分是建立与数据库的连接并找到正确的行。在那之后,它只是更多的数据 - 添加 50 个额外的列将对性能产生不明显的影响。

    只有当你的模型/表包含成百上千个属性时才会出现这种情况。在这种情况下,解决方案是将模型拆分为子模型。并通过 REST 单独处理它们。但它们应该是业务逻辑类型。例如,Business 包含 Address、Employee、ShareStructure。

    我自己曾经是一个过早的优化器...“当我只需要 1 列时,不能返回 10 列”。但是,如果尝试为您可能需要的各种组合中的每个数据子集编写 Web 服务 API,那么您的 API 实际上将无法使用和维护。你也永远无法完成任何工作。

    假设您想从 Facebook 的 API 中获取可口可乐的头像,您只需调用:

    https://graph.facebook.com/cocacola

    并获得 图片 属性。谁在乎您是否不需要其余数据?它使事情变得简单、宁静且易于维护。

    【讨论】:

      【解决方案2】:

      我的第一个想法是您将复制骨干已经提供的许多功能。我看不出有什么理由必须在客户端完全复制您的业务模型。为什么不将您的基本信息、个人资料等分解为单独的 Backbone 模型,并根据需要将它们应用到您的视图中。

      【讨论】:

      • 分解是一个很酷的想法,但我不会编写后端来支持这些模型吗?
      • 我认为,仅此而已。您将如何处理单独的获取方法等。fetch_basic_info、fetch_profile_picture
      • 也考虑@reach4thelasers 的回答。如果您可以拥有一个模型,并且您的每个视图都可以修改他们需要的任何内容并保存它,那么客户端和后端的事情都会简单得多。如果您有幸需要它,您可以随时进行优化。
      猜你喜欢
      • 2020-06-28
      • 2019-12-08
      • 2011-07-03
      • 2019-10-26
      • 1970-01-01
      • 2013-03-14
      • 2020-09-13
      • 2019-09-01
      • 1970-01-01
      相关资源
      最近更新 更多