Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干模型销毁url不传递模型id_Javascript_Backbone.js - Fatal编程技术网

Javascript 主干模型销毁url不传递模型id

Javascript 主干模型销毁url不传递模型id,javascript,backbone.js,Javascript,Backbone.js,在我的应用程序中,我想从收藏中删除一个模型,并在我的视图中调用this.model.destroy。但是,当触发函数时,我得到一个405响应,响应的url不包含模型的id。根据我从文档中了解的情况,Backbone基于集合url+模型id创建url。我通过将url传递给destroy方法解决了这个问题,但我知道这不是最好的方法。 不知何故,我觉得这应该没有我的黑客工作。 发送删除请求时,后端需要Id。 如何使用主干网的最佳实践来实现这一点 My.Model._entity = B

在我的应用程序中,我想从收藏中删除一个模型,并在我的视图中调用this.model.destroy。但是,当触发函数时,我得到一个405响应,响应的url不包含模型的id。根据我从文档中了解的情况,Backbone基于集合url+模型id创建url。我通过将url传递给destroy方法解决了这个问题,但我知道这不是最好的方法。 不知何故,我觉得这应该没有我的黑客工作。 发送删除请求时,后端需要Id。 如何使用主干网的最佳实践来实现这一点

        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'

    });

“My.Model.cartItem”不应使用字符串覆盖url属性,也不应完全覆盖它。默认情况下,模型的url是一个函数,它将其id属性与已定义的集合url基的末尾相结合


如果您想指定一个自定义url路径与您的模型Id相结合,您仍然可以使用urlRoot而不是url。不过,在这里删除“url”应该没问题。

实际上,我是通过将urlRoot设置为函数来解决这个问题的

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

显然,这允许集合构造url。

itemId是您的id属性吗?如果是,请将idAttribute:“itemId”添加到模型定义中:这将覆盖集合url,并在我要发布时触发错误。您对模型做了什么更改,它产生了什么错误?我将模型中的url更改为“urlRoot:function{return/checkout/item;}您不需要在模型上定义urlRoot或url属性,因为它将从集合中提取“url”属性。如果查看源代码,您将了解为什么urlRoot可以正常工作,但如果模型位于集合中,则urlRoot是不必要的: