骨干模型破坏URL不传递模型ID

时间:2015-01-20 17:37:46

标签: javascript backbone.js

在我的应用中,我想从一个集合中删除一个模型并调用" this.model.destroy"在我看来。但是,当触发函数时,我得到405响应,并且响应的url不包含模型的id。根据我从文档中理解的内容,Backbone基于" Collection url + model id"创建了url。我通过将url传递给destroy方法来修复问题,但是知道这不是最好的方法。 不知何故,我觉得这应该没有我的" hack"。 发送DELETE请求时,后端需要Id。 如何使用Backbone的最佳实践来实现这一目标?

        My.Model._entity = Backbone.Model.extend({

        initialize: function(options) {
            if (options.created && typeof options.created === 'string') {
                this.set('created', new Date(options.created));
            }

            if (options.modified && typeof options.modified === 'string') {
                this.set('modified', new Date(options.modified));
            }
        },

        defaults: function() {
            return {
                created: new Date(),
                modified: new Date()
            };
        }
    });


    My.Model.cartItem = My.Model._entity.extend({

        defaults: function () {
            var _def = My.Model.cartItem.__super__.defaults.apply(this, arguments);
            return _.defaults(_def, {
                description: "",
                title: "",
                image: "",
                price: 0,
                quantity: 0,
                itemId: ''
            });
        },

        url: '/checkout/item'
    });

    My.Collection.CartItem = Backbone.Collection.extend({
        model: My.Model.cartItem,
        url: '/checkout/item'

    });

2 个答案:

答案 0 :(得分:3)

实际上将urlRoot设置为函数就是我如何解决它。

urlRoot: function () {
        return "/checkout/item";
    }

显然,这允许Collection构建url。

答案 1 :(得分:1)

你的My.Model.cartItem'不应该用字符串覆盖url属性(或根本覆盖它)。默认情况下(见here),模型的网址是一个函数,它将其id属性与集合的url base(已经定义)的结尾相结合。

如果您想指定要与模型ID结合使用的自定义网址路径,您仍然可以使用" urlRoot"而不是" url"。您应该没问题,只需删除&{39; url'在这里。