【问题标题】:Backbone.js : Is cid only used for ModelsBackbone.js : cid 仅用于模型
【发布时间】:2013-08-28 11:31:29
【问题描述】:

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

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

【问题讨论】:

标签: javascript backbone.js


【解决方案1】:

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 -attribute 分配给 @987654337 @属性。

例子:

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 模型的 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 被相应地设置。

【讨论】:

  • 谢谢很多...你能详细说明一下 var IdAttributeModel = Backbone.Model.extend({idAttribute: "_id"}); var idAttributeModel = new IdAttributeModel({_id: 1});
  • 很好的答案。一个补充:一个视图也有一个cid。
  • 我在答案中添加了这个并详细说明了最后一个示例,我真的不知道如何进一步详细说明。
【解决方案2】:

来自backbone.js

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 2011-07-15
    • 1970-01-01
    • 2012-02-15
    • 2014-08-11
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多