我正在尝试销毁模型(在集合和我的服务器上),根据我的理解,backbone.js应该将model.id和DELETE请求传递给我的服务器,如果我调用
this.model.destroy();
当我查看console.log(this.model);
时,控制台会显示具有此结构的模型。
d _callbacks: Object _changed: false _changing: false _escapedAttributes: Object _previousAttributes: Object attributes: Object cid: "c2" collection: d id: 13 __proto__: o
rails返回404错误,当我从骨干销毁函数输出响应时,我得到
Object abort: function (a){a=a||"abort",p&&p.abort(a),w(0,a);return this} always: function (){return b.done.apply(b,arguments).fail.apply(this,arguments)} complete: function (){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g↵↵↵ ↵ Action Controller: Exception caught↵ ↵ body { background-color: #fff; color: #333; }↵↵ body, p, ol, ul, td {↵ font-family: helvetica, verdana, arial, sans-serif;↵ font-size: 13px;↵ line-height: 18px;↵ }↵↵ pre {↵ background-color: #eee;↵ padding: 10px;↵ font-size: 11px;↵ }↵↵ a { color: #000; }↵ a:visited { color: #666; }↵ a:hover { color: #fff; background-color:#000; }↵ ↵↵↵↵Routing Error
↵No route matches [DELETE] "/menu_dishes"
↵↵↵↵↵↵” setRequestHeader:function(a,b){if(!s){var c = a.toLowerCase(); a = m [c] = m [c] || a,l [a] = b}返回此} 状态:404 statusCode:function(a){if(a){var b; if(s。)
关于如何删除模型的任何想法? 我没有在文档中看到有关如何将模型ID传递给rails的内容,因为我认为这是缺少的。
答案 0 :(得分:1)
如果您使用默认的Backbone同步,那么用于模型的网址是通过此方法计算的(来自Backbone源代码):
url: function() {
var base = getValue(this.collection, 'url') || getValue(this, 'urlRoot') || urlError();
if (this.isNew()) return base;
return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + encodeURIComponent(this.id);
}
当你认为你应该得到“/ menu_dishes / the_id”时,你会得到“/ menu_dishes”,对吗?
您可以向Backbone.sync添加断点并逐步执行上述代码。也许id设置不正确?我只是猜测这一点,但默认情况下Backbone期望id属性为'id',也许这不是你的id属性的名称(可能是'dishId'或其他东西?)。
如果是这种情况,请查看Backbone来源:
idAttribute: 'id'
也许您需要在模型中覆盖它。