Backbone.js:cid仅用于模型

时间:2013-08-28 11:31:30

标签: javascript backbone.js

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

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

2 个答案:

答案 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。