【问题标题】:Backbone sync/save with MongoDB ObjectID使用 MongoDB ObjectID 进行主干同步/保存
【发布时间】: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


【解决方案1】:

有没有可能,ID 没有定义,因为你只定义了id

您正在使用this.model.set({id:data.age, ...小写)来定义您的标识符。
但是将idAttribute: "ID",大写)定义为 ID 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多