2012-06-15 35 views
0

我是新来的骨干,尝试了我的第一个应用程序后,通过几个教程的应用程序。Backbone.js自定义休息路线

我想知道什么是完成以下

在后端(导轨)

我有一个型号名称业务的最佳方式,这是一个有很多属性的复杂模型,它有一个关联的地址(has_one :address),并有一个化身和另一个配置pitcure和很多。

从我的前端我想能够获取和更新商业资料的特定部分,让我们说我只想获取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()请求被发送。之后,触发自定义事件事件,通知视图并呈现自己

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

你对此有何看法。

谢谢您的阅读和feedbcak。

回答

0

你想要做的不是很RESTful。如果你试图这样做来节省资源或网络带宽,那么它几乎肯定是一个过早的优化 - 除非我们正在谈论数百或数千个领域 - 在这种情况下,有一个更好的解决方案。

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

再加上数据库年底,

select * from businesses where id=123

只使用一点点超过

select profilepic from businesses where id=123

工作以来最困难的部分是建立与数据库的连接并找到正确的行。之后,它的数据会更多 - 增加50个额外的列会对性能产生不明显的影响。

这种情况只会发生在您的模型/表格包含数百或数千个属性。在这种情况下,解决方案是将您的模型分解为子模型。并通过REST单独处理它们。但他们应该是业务逻辑类型。例如,业务包含地址,员工,股票结构。

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

说你想获得可口可乐的资料图片关闭Facebook的API,你只需拨打:

https://graph.facebook.com/cocacola

,并得到图片财产。谁在乎你是否需要其余的数据?它使事情变得简单,宁静,易于维护。

0

我的第一个想法是,你会复制骨干已经提供的许多功能。我不明白为什么你必须在客户端完全复制你的业务模型。为什么不把你的基本信息,配置文件等分解成单独的骨干模型,并根据需要将它们应用到你的视图。

+0

分解是一个很酷的想法,但我不会写我的后端来支持这些模型吗? – Abid

+0

没有比你的方法,我想。你打算如何处理你的单独的获取方法,等等。fetch_basic_info,fetch_profile_picture – lecstor

+0

也考虑到@the4thelasers的答案。如果你可以有一个单一的模型,并且你的每个视图都可以修改他们需要的任何东西并保存它,那么在客户端和后端都会变得更简单。如果您足够幸运需要,您可以随时进行优化。 – lecstor