Backbone.js自定义休息路由

时间:2012-06-15 12:25:25

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

我是骨干新手,在完成一些教程应用后试用我的第一个应用程序。

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

在后端(rails)

我有一个模型名称Business,它是一个具有很多属性的复杂模型,它有一个相关的地址(has_one :address),并且有一个头像和另一个配置文件pitcure等等。

从我的前端,我希望能够获取和更新业务配置文件的特定部分,让我说我只想获取包含名称,类别和地址的basic_info,而不是我希望能够更新配置文件图片和头像。

我在骨干网上看到的是模型有方法save,update,fetch,destroy

如果我想使用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来设置骨干模型的属性)。之后触发自定义事件事件,通知视图并呈现自身

这是我的第一个真正的骨干应用程序,所以如果我正在做的事情真的让我停下来。

您对此有何看法。

感谢您阅读和feedbcak。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

在数据库端加一个

select * from businesses where id=123

只使用了一点点

select profilepic from businesses where id=123

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

唯一一次,如果您的模型/表包含数百或数千个属性。在这种情况下,解决方案是将您的模型拆分为子模型。并通过REST单独处理它们。但它们应该是业务逻辑类型。例如,Business包含Address,Employee,ShareStructure。

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

假设您想从Facebook的API获取CocaCola的个人资料照片,您只需致电:

https://graph.facebook.com/cocacola

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