在Backbone.js中,有一个我认为叫做“cid”的属性......它只用于模型对象(而不是视图或集合)
也只是Model对象使用的“id”和“idAttribute”?有什么不同? 如果你能用一个非常基本的例子来解释它会很棒。
答案 0 :(得分:7)
cid
是Backbone模型的一个属性,它作为每个模型的唯一标识符,直到它们被分配了真实的id
。在分配了模型id
或与idAttribute
匹配的属性后,不再使用cid
。有关更多信息,请参阅backbone.js docs。 View也有cid
,但这更适用于内部簿记和jquery事件绑定/解除绑定。
id
也是模型的特殊属性,它用于保存模型的后端标识符(大多数数据库为每个新条目/行创建某种标识符)。当这个标识符被标记为id
时,Backbone.js开箱即用,但是有些数据库以不同的方式标记它们的标识符(例如,带有_id
的MongoDB)。
在这些情况下,Backbone不知道将该属性从属性移动到id
-property的开箱即用。这就是idAttribute
派上用场的地方:您可以将其定义为指向备份标识符(在MongoDB的情况下为_id
),然后Backbone知道分配给定的_id
- 归属于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
要真正推动这一点:
每次调用Backbone Model的set
时,它会检查要设置的属性中是否存在idAttribute
,并将该属性的值设置为新的id
。这可以从this line of code in the Backbone.js source:
if (this.idAttribute in attrs) this.id = attrs[this.idAttribute];
正如您所见the default idAttribute is 'id'。设置自己的idAttribute
会导致相应地设置模型id
。
答案 1 :(得分:0)
来自backbone.js:
模型的特殊属性,cid或客户端ID是在首次创建时自动分配给所有模型的唯一标识符。当模型尚未保存到服务器时,客户端ID很方便,并且尚未具有其最终的真实ID,但已经需要在UI中可见。
idAttribute几乎相同,但区别在于它包含从现有后端获取的模型的id。