2012-02-15 124 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