我正在使用骨干集合从服务器获取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});
}());
Run Code Online (Sandbox Code Playgroud)
但是后来当我尝试在删除条目时访问模型的'idAttribute'时,它返回'id'而不是'_id',这意味着来自视图的this.model.isNew()返回'true'表示所有从服务器获取的记录.因此我不能删除也不能输入服务器.
但是,如果我使用这样的原型设置idAttribute(而不是在PlaceModel定义中):
Backbone.Model.prototype.idAttribute = "_id";
Run Code Online (Sandbox Code Playgroud)
然后它正确地将idAttribute映射到'_id',一切正常.可能会发生什么?
当你这样说:
var place = new PlaceCollection({model:PlaceModel});
Run Code Online (Sandbox Code Playgroud)
这或多或少都是这样说的:
var o = new Backbone.Model({ model: PlaceModel });
var place = new PlaceCollection([ o ]);
Run Code Online (Sandbox Code Playgroud)
你没有设置集合"class"的model属性,你只是在其中创建一个包含一个模型的集合(一个普通的Backbone.Model实例,而不是一个PlaceModel),并且该模型具有一个model带有值的属性PlaceModel.
所以,考虑到这一切,该集合并不知道它的模型应该具有idAttribute: "_id"甚至它的模型应该是一个PlaceModel.您希望model在创建时看到PlaceCollection,而不是在创建时place:
var PlaceCollection = Backbone.Collection.extend({
url: "http://localhost:9090/places",
model: PlaceModel,
//...
});
var place = new PlaceCollection;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2054 次 |
| 最近记录: |