2012-02-15 28 views
0

我试图摧毁一个模型(在集合和我的服务器上),并从我的理解,backbone.js应该通过在model.id和DELETE请求到我的服务器,如果我叫backbone.js中的this.model.destroy()返回对象没有方法销毁

 
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 

导轨返回404错误,以及何时I输出从主链上的响应功能破坏,我得到

 
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:功能(A,B){如果( !s){var c = a.toLowerCase(); a = m [c] = m [c] || a,l [a] = b} return this} status:404 statusCode:function(a){ if(s){var b; if(s

关于如何删除我的模型的任何想法? 我没有在文档中看到有关如何将模型id传递到rails的任何信息,因为我认为这是缺少的。

+1

this.destroy()不起作用,因为您处于视图中,视图上没有“destroy()”。 this.model.destroy()将是正确的方式(http://documentcloud.github.com/backbone/#Model-destroy)虽然你应该给我们的内容(console.log(this.model)),那会帮帮我。并且在调用this.model.destroy()时使用成功/错误回调,以便您了解发生的更多信息。 – mna 2012-02-15 13:27:54

+0

并且在您的服务器上定义了哪些路由?我不太了解Ruby on Rails,但我认为它使用“_method”字段来模拟“删除”和“放入”http请求,对吗? Backbone使用'Backbone.emulateHTTP = true;'支持这一点。也许值得一试。 – mna 2012-02-15 15:42:48

回答

1

如果您使用的是默认的骨干同步,然后用于模型中的URL是用这种方法计算的(从骨干源):

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”当你认为你应该得到“/ menu_dishes/the_id”,对吗?

您可以将一个断点添加到Backbone.sync并逐步执行上述代码。也许这个ID没有设置正确?我只是猜测在这一点上,但默认情况下Backbone预计ID属性是'ID',也许这不是你的ID属性的名称(也许它是'dishId'或什么?)。

如果是这样的情况下,签出主干来源:

idAttribute: 'id' 

也许你需要重写,在你的模型。

+0

有趣的保罗,我添加了一个'console.log(this)'到url函数,但是这并没有被破坏触发。我想也许我没有使用同步,也许这是问题? – pedalpete 2012-02-15 16:33:43

+0

忽略最后的评论,显然没有办法不使用同步与销毁。 id属性的名称是id,它在模型'id:13'的控制台日志中可见。 – pedalpete 2012-02-15 17:01:05

+0

在sync()中放置一个断点,或者在调用sync的model.destroy()中放置更高的断点。浏览代码,看看发生了什么。您应该能够在发送DELETE时看到它正在使用的网址。 – 2012-02-15 17:01:10