Backbone.js:cid仅用于模型

tes*_*dtv 2 javascript backbone.js

在Backbone.js中,有一个我认为叫做"cid"的属性......它只用于Model对象(而不是视图或集合)

也只是Model对象使用的"id"和"idAttribute"?有什么不同?如果你能用一个非常基本的例子来解释它会很棒.

jak*_*kee 7

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

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

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

例:

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
Run Code Online (Sandbox Code Playgroud)

要真正推动这一点:

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

if (this.idAttribute in attrs) this.id = attrs[this.idAttribute];
Run Code Online (Sandbox Code Playgroud)

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