gpt4 book ai didi

backbone.js - 获取集合时未设置 idAttribute

转载 作者:行者123 更新时间:2023-12-01 10:03:38 25 4
gpt4 key购买 nike

我正在使用主干集合从服务器获取一个 mongodb 集合。由于 ID 存储为“_id”,我使用 idAttribute 将其映射到“_id”。

(function(){
var PlaceModel = Backbone.Model.extend({
idAttribute: "_id",
});
var PlaceCollection = Backbone.Collection.extend({
url: "http://localhost:9090/places",
initialize: function(options){
var that = this;
this.fetch({
success: function(){
console.log("Success!", that.toJSON());
},
error: function(){
console.log("Error");
}
});
}
});

var place = new PlaceCollection({model:PlaceModel});

}());

但稍后当我尝试访问模型的“idAttribute”时,当需要删除条目时,它返回“id”而不是“_id”,这意味着 View 中的 this.model.isNew() 返回“true” ' 用于从服务器获取的所有记录。因此我不能删除也不能将条目放入服务器。

但是,如果我使用这样的原型(prototype)设置 idAttribute(而不是在 PlaceModel 定义中):

Backbone.Model.prototype.idAttribute = "_id";

然后它正确地将 idAttribute 映射到“_id”,一切正常。可能会发生什么?

最佳答案

当你这样说时:

var place = new PlaceCollection({model:PlaceModel});

这或多或少是这样说的:

var o     = new Backbone.Model({ model: PlaceModel });
var place = new PlaceCollection([ o ]);

您没有设置集合“类”的 model属性,您只是创建一个包含其中一个模型的集合(普通 Backbone.Model 实例,而不是 PlaceModel)并且该模型有一个 model 属性值为 PlaceModel

所以,考虑到所有这些,集合不知道它的模型应该有 idAttribute: "_id" 甚至它的模型应该是 PlaceModel。您希望在创建 PlaceCollection 时看到 model,而不是在创建 place 时看到:

var PlaceCollection = Backbone.Collection.extend({
url: "http://localhost:9090/places",
model: PlaceModel,
//...
});

var place = new PlaceCollection;

关于backbone.js - 获取集合时未设置 idAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13224985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com