【问题标题】:Backbone.js - id vs idAttribute vs cidBackbone.js - id vs idAttribute vs cid
【发布时间】:2012-08-29 01:42:29
【问题描述】:
我已经研究 Backbone.js 几个星期了,我觉得在模型、路由器和集合中使用视图很舒服。
我还有一些很大的差距:
id、cid 和 idAttribute 之间有什么联系?它们如何相互影响?
新模型究竟何时获得其 ID?服务器负责分配吗?我是否需要将其添加到模型的defaults(可能作为一个函数)?也许addNewModel 函数应该这样做?
【问题讨论】:
标签:
javascript
jquery
ajax
backbone.js
underscore.js
【解决方案1】:
id、cid 和 idAttribute 之间有什么联系?它们如何相互影响?
cid 和 id 都应该是模型的唯一 ID,并且可以用于 retrieve 模型 from 集合。
两者之间的区别在于cid 是由backbone.js 客户端分配的,如果您没有实际的ID,则很有用,因为模型尚未保存到服务器,或者可能您甚至没有将其保存到数据库(也许您正在使用localStorage)。 id 属性应该是来自您的服务器的模型的 id(这就是您的数据库中的 id)。 idAttribute 告诉骨干网应该使用来自您的服务器的哪个“字段”来更新id 属性,默认情况下,它设置为“id”,但正如documentation 中所说,如果您的服务器使用其他东西,您可以将其设置为那个(给出的示例是将其设置为“_id”。
新模型究竟何时获得其 ID?服务器负责分配吗?我是否需要将其添加到模型的defaults(可能作为一个函数)?也许addNewModel 函数应该这样做?
他们应该在保存到server 时获得新的 ID,并且您不需要手动设置它(基于 idattribute),除非您需要对流程进行更多控制。
【解决方案2】:
id - 可以在创建模型时手动设置的 ID,或者在模型保存在服务器上时填充的 ID(请参阅底部的“idAttribute”以查看连接)。这是从服务器加载或更新模型时发送到服务器的 id,例如,对于模型 Person,如果 id 为 123,则将进行此调用,“/person/123”
cid - 唯一 id 设置我的主干模型供内部使用
idAttribute - 这决定了当模型保存在服务器上时哪个属性将充当唯一 id(默认为“id”),例如,模型在服务器上的唯一键可能由“personId”定义,所以当fetch 被称为模型会将服务器响应从“personId”映射到主干模型中的 id。
【解决方案3】:
id 是服务器型号 ID,cid 是客户端 ID。
- 服务器模型:如Rails模型
- 客户端模型:骨干模型
【解决方案4】:
模型上的 id 属性是根据模型属性哈希中设置的 id 自动分配的。理想情况下,这是您从要查询的资源的 REST API 收到的 ID。另一方面,cid 是临时分配给每个模型的 ID,在确定对象的实际 ID 之前很有用。例如,推送到尚未持久化的集合的模型可以使用cid 处理,直到它保存在数据库中并为其生成实际 ID。