【发布时间】:2015-01-15 16:25:52
【问题描述】:
我不了解 Backbone 的一件事是它如何知道要与数据库中的哪些对象同步。我在后端使用 MongoDB - 我如何告诉 Backbone 生成 MongoDB 样式的 ObjectID 以存储在数据库中(也许 Backbone 只是从 Mongo 获取 ID - 但如果不是,我如何保证这个 Backbone 生成的 ID 与MongoDB 生成 ObjectID?)我遇到的主要问题是没有 Backbone.Model id 附加到我在 PUT 或 DELETE 调用时在我的模型中定义的根 url 的末尾。
这是我的模型:
var team = document.getElementsByName('team');
console.log(team);
var Player = Backbone.Model.extend({
defaults: {
ID: "",
team: team,
firstName: '',
lastName: '',
age: '',
phone: '',
email: ''
},
idAttribute: "ID",
urlRoot: 'http://localhost:3000/api/players'
});
var PlayerCollection = Backbone.Collection.extend({
model: Player
});
这里是视图:
var addPlayerView = Backbone.View.extend({
tagName: "div",
id: 'addPlayerDiv',
events: {
'click #submitNewPlayer': 'onAddPlayer',
'click #cancelNewPlayer': 'cancelAddPlayer'
},
initialize: function () {
},
render: function () {
var playerTemplate = document.getElementById('add-player-template').innerHTML;
this.$el.html(_.template(playerTemplate)());
return this;
},
onAddPlayer: function (event) {
event.preventDefault();
var data = form2js('add-player-template-form','.',true);
this.model.set({id:data.age,age:data.age,phone:data.phone,email:data.email});
this.model.save();
$(this.el).removeData();
this.unbind();
this.remove();
window.mainManageRosterView.render();
}
});
这里是我用新模型实例初始化新视图的地方:
<script>
function addNewPlayer(event) {
event.preventDefault();
var player = new Player({}); //perhaps this is incorrect, the id is null/undefined after all
var newPlayerView = new addPlayerView({el: $("#addPlayerDiv"), model: player});
var rendered = newPlayerView.render();
$(rendered.el).appendTo(this.$el).hide().fadeIn().slideDown();
};
</script>
我肯定做错了什么。模型在视图中肯定不是未定义的,但它没有 ID。如何给我的 Backbone 模型一个 ID?也许Backbone在保存后才给模型一个id?
重申一下,我遇到的主要问题是 Backbone 不会自动将 ID 附加到我在上面在模型中定义的根 URL 的末尾:
PUT /api/players/ 404 319ms - 475b
但它应该是这样的:
PUT /api/players/[mongoDB ObjectID here] 200 319ms - 475b
所以基本上,身份证不见了,我不知道为什么。此外,Backbone 到底为什么要做 PUT?如果它是第一次保存这个模型,它不应该是一个 POST 吗?
【问题讨论】:
-
this.model.set({id:data.age,age:data.age,phone:data.phone,email:data.email});尝试id的大写字母,如您在idAttribute中定义的那样
标签: node.js mongodb backbone.js