2

在 Backbone.js 中,我看到一个名为“cid”的属性......它仅用于模型对象(而不是视图或集合)

模型对象也只使用“id”和“idAttribute”吗?有什么区别?如果你能用一个非常基本的例子来解释,那就太好了。

4

2 回答 2

7

cid是主干模型的一个属性,它充当每个模型的唯一标识符,直到它们被分配一个真实的id. 在分配了与 匹配的模型id或属性后,不再使用 。有关更多信息,请参阅主干.js 文档。View 的 have 也有,但更多的是用于内部簿记和 jquery 事件绑定/解除绑定。idAttributecidcid

id也是模型的特殊属性,它用于保存模型的后端标识符(大多数数据库为每个新条目/行创建某种标识符)。当这个标识符被标记id时,Backbone.js 可以开箱即用,但是有些数据库会以不同的方式标记它们的标识符(例如 MongoDB _id)。

在这些情况下,Backbone 不知道开箱即用地将该属性从属性移动到id-property。这是idAttribute派上用场的地方:您可以将其定义为指向支持的标识符的标签(在 MongoDB 的情况下_id),然后 Backbone 知道将给定的_id-attribute分配给id属性。

例子:

var noIdModel = new Backbone.Model();
noIdModel.id // this will be undefined
noIdModel.cid // this will be something like c1

var idModel = new Backbone.Model({id: 1});
idModel.id // this will be 1
idModel.cid // this will be something like c2

// extend a model to have an idAttribute
var IdAttributeModel = Backbone.Model.extend({idAttribute: "_id"});
// create and instance of that model
// assign a value for an attribute with the same name as idAttribute
var idAttributeModel = new IdAttributeModel({_id: 1});
idAttributeModel.id // this will be 1
idAttributeModel.cid // this will be something like c3

真正把要点带回家:

每次set调用 Backbone 模型时,它都会检查idAttribute要设置的属性中是否存在 ,并将该属性的值设置为新的id。这可以从Backbone.js 源代码中的这行代码中看出:

if (this.idAttribute in attrs) this.id = attrs[this.idAttribute];

如您所见,默认 idAttribute 是 'id'。设置您自己的idAttribute将导致相应id地设置模型。

于 2013-08-28T12:10:50.883 回答
0

主干.js

模型的一个特殊属性,cid 或客户端 id 是一个唯一标识符,当它们第一次创建时自动分配给所有模型。当模型尚未保存到服务器并且还没有最终的真实 id 但已经需要在 UI 中可见时,客户端 id 很方便。

idAttribute 几乎相同,但不同之处在于它包含从现有后端获取的模型的 id。

于 2013-08-28T11:36:19.723 回答