0

Backbone で model.destroy() を実行するたびに、次の URL で DELETE リクエストを実行しようとします。

http://localhost:8000/api/v1/item/?format=json

モデルで破棄を行っているため、モデルの ID を渡す必要があると予想されるため、DELETE リクエストを実行する URL は次のようになります。

http://localhost:8000/api/v1/item/8/?format=json

ID を指定します。IDの不足とtastypieの使用により、すべてのアイテムが削除されます. 削除したいアイテムの ID が URL に含まれるようにするにはどうすればよいですか?

4

1 に答える 1

2

あなたのモデルは次のようになると思います:

var M = Backbone.Model.extend({
    url: '/api/v1/item/?format=json',
    // ...
});

モデルのurlfor は関数であるはずですが、最終的に内部関数を通過getValueするため、文字列も「機能」します。urlリンク先のソースを確認すると、文字列 forが表示されている結果をもたらす理由がわかります。

url解決策は、想定どおりに関数を使用することです。

URL model.url()

サーバー上でモデルのリソースが配置される相対 URL を返します。モデルが別の場所にある場合は、このメソッドを正しいロジックでオーバーライドしてください。フォームの URL を生成します:モデルがコレクションの一部でない場合"/[collection.url]/[id]"にフォールバックします。"/[urlRoot]/id"

あなたはおそらく次のようなものが欲しいでしょう:

url: function() {
    if(this.isNew())
        return '/api/v1/item/?format=json';
    return '/api/v1/item/' + encodeURIComponent(this.id) + '/?format=json';
}

またはこれ:

url: function() {
    if(this.isNew())
        return '/api/v1/item/?format=json';
    return '/api/v1/item/' + encodeURIComponent(this.get('id')) + '/?format=json';
}
于 2012-04-17T05:07:56.707 に答える