2012-03-07 10 views
2

モデルでバックボーン破壊メソッドを呼び出すと、このエラーが発生します。バックボーン破壊エラー

A「URL」プロパティまたは関数が

を指定する必要があります私は地元のコレクションを使用していると私は、保存の方法は、URLを探しdestroyメソッドで呼び出されたことをどこかにオンラインを見ました。これの周りにはありますか?どのようにしてエラーが発生するのを防ぐことができますか。

+2

あなたが達成しようとしているのは何? 'destroy'メソッドの目的は、サーバ*上のモデル*を削除することです。 – nrabinowitz

+0

コレクション内のモデルを削除しようとしていますが、私が使用しているコードからコレクションにアクセスすることはできません。モデルにはURLがないため、破壊が機能すると思われますが、エラーが発生します。だから私はこれに対する解決策を見つけようとしている。モデル自体からモデルが入っているコレクションを取得する方法はありますか? – Chapsterj

+0

コレクションには 'remove'メソッドがあります。 – JayC

答えて

2

コメントで述べたように、destroyはサーバーから削除するためのもので、実際にはコレクションから実際には削除されません。

それはコメントに思えるような問題がコレクションから削除された場合...

モデルは、モデルのcollectionプロパティ経由でのコレクションへのアクセスを持っています。

var Model = Backbone.Model.extend({ 
     defaults:{ name: 'bob' } 
    }), 
    Collection = Backbone.Collection.extend({ 
     model: Model 
    }); 

var c = new Collection([{ name: 'joe'}, {name: 'h'}, {name: 'bob'}]); 

var m = c.at(1); // get model at index 1 name = h 

m.collection.remove(m); // access the collection via the model we pulled out 

console.log(c.length); // only 2 models within :) 

http://jsfiddle.net/Pn2Vw/1/

+0

ありがとうございました。私は、モデルにこのコレクション属性があることを認識していませんでした。 モデルが複数のコレクションに追加されたときに何が起こるのか不思議でしたので、[source](http://backbonejs.org/docs/backbone.html#section-81)を確認し、Collection._prepareModelモデルのコレクション属性が設定されます。したがって、同じモデルが複数のコレクションに追加された場合、そのコレクション属性は、そのモデルが最後に追加されたコレクションを指します。 – Aaron

+0

また、「[破棄]は実際にコレクションから削除されない」という記述は間違っていると思います。 Per [Model.destroy source](http:// backbonejs。org/docs/backbone.html#section-59)と[Collection._onModelEvent source](http://backbonejs.org/docs/backbone.html#section-105)では、コレクションは「トリガー」イベントに反応しますモデル。注意:destroyイベントで渡されたコレクション引数は、モデルのコレクション属性を反映しています。必ずしもイベントをそのリスナーのいずれかに転送するコレクションではありません。 – Aaron

0

私は同様の問題がありました。サーバーからError 500を返すとテスト、私はに私がしようとした二度目に同じエラーを得たことを

this.model.destroy({ 
    success: function(model, response) { 
    this.remove(); 
    } 
}); 

:私の問題は、私はcoollectionかないからモデルを決定するかどうか削除するために破壊するコールバックを使用したことでしたdestroyを呼び出します。

解決策は、the manualに由来します。私はthis.remove();を呼び出すことはありませんでしたが、モデルがコレクションから削除されたように見える:

パス{待ち:真}サーバーがコレクションからモデルを削除する前に応答するのを待つしたいと思います。

結果は以下のようになります。

this.model.destroy({ 
    wait: true, 
    success: function(model, response) { 
    this.remove(); 
    } 
});