我尝试了 2 种不同的方法来管理收藏,第二种方法对我来说听起来更干净,但我无法让它发挥作用。
我来这里是为了了解在这种非常基本的情况下,在骨干网和 mongoDB 模式上组织代码的最佳方法是什么(以及为什么第二个不起作用)
在我的两个示例中,情况都collection Friends
在Model User
第一个例子(效果很好)
客户端
App.Models.User = Backbone.Model.extend({
defaults : {
username : "example",
Friends: []
},
});
服务器端
UserSchema : {
name: {
type: String,
required: true,
unique: true
},
Friends:
[ {
user_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
status: {
type: Boolean
},
}]
Friends references
使用这种方法,当我从客户端填充User document
集合时,主干可以很好地收集集合。
第二个示例(对我来说似乎更干净,但在获取集合时失败)
客户端
App.Models.User = Backbone.Model.extend({
defaults : {
username : "example",
status: [], //Since Friends is now a collection i build an array to index each user_id according to its status.
Friends: new App.Collections.User()
},
});
服务器端
UserSchema : {
name: {
type: String,
required: true,
unique: true
},
status: [ {
user_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
value: Bolean
} ],
Friends:
[ {
user_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
}]
应用程序集合用户
App.Collections.User = Backbone.Collection.extend({
model: App.Models.User,
initialize : function() {
},
getFriends: function(callback) {
console.log('getFriends called!');
this.url = App.url+'friends';
this.fetch({
success: function(collection, response, options) {
console.log('fetch OK');
console.log(collection.toJSON());
callback(true);
},
error: function(collection, response, options) {
console.log('fetch KO');
callback(false);
}
});
}
});
使用这种方法,当我获取 时Friends collection
,我得到一个错误Uncaught TypeError: undefined is not a function (on chrome)
或者TypeError: this.model is not a constructor (on firebug)
,两者都在backbone-0.9.9.js (ligne 26)
success callback
它发生在from方法内部之前,collection's fetch
并且仅当从服务器 ide 返回一个集合时(当它为 null 时,没有问题,例如骨干网无法解析它)。
返回的 JSON 如下所示:
[
{
"__v": 0,
"_id": "5137cdf1538238073f000005",
"username": "Someone Else",
"status": [
{
"user_id": "5137cb9b730754a666000006",
value: true
}
],
"Friends": [
{
"user_id": "5137cb9b730754a666000006",
"_id": "5137cf2e0399fd7c3f000005"
}
],
},
"_id": "5137cf2e0399fd7c3f000006"
}
]
那么在这两种方法之间组织代码的最佳方法是什么?为什么你认为我在第二个错误时会出现这个错误(我的 JSON 无效吗?)?