backbone.js中的this.model.destroy()返回对象没有方法销毁

时间:2012-02-15 11:45:30

标签: javascript backbone.js

我正在尝试销毁模型(在集合和我的服务器上),根据我的理解,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的内容,因为我认为这是缺少的。

1 个答案:

答案 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'

也许您需要在模型中覆盖它。