11

破棄しようとしているバックボーン モデルがありますが、リクエストと共にパラメーターが送信されていないため、サーバーは「Delete 404 not found」エラーを返しています。

アイテムが既にリストにあるかどうかに基づいてアイテムを作成/破棄しているため、私の構造が少し奇妙であることは認めます。

var list_item = new MyApp.Models.ListItem({item_id: this.model.id, group_id: this.model.group_id});

    if($(e.currentTarget).hasClass('add')){

            list_item.save(list_item, {
                成功: 関数 (応答) {
                     this.model.attributes.addedtolist_id = response.id
                     console.log(this.model);
                }、
                エラー: 関数(){
                     alert('アイテムを保存できませんでした');
                }
           });
    } else if($(e.currentTarget).hasClass('remove')) {
         list_item.id=this.model.addedtolist_id;
         list_item.attributes.id = this.model.addedtolist_id;
         console.log(list_item);
         list_item.destroy({
             成功: 関数(){
                アラート ('削除');
             }、
             エラー: 関数(){
               alert('チェックを外すことができませんでした');
            }
   });
}

list_item破棄前のコンソール出力は

_escapedAttributes: オブジェクト
_previousAttributes: オブジェクト
_setting: false
アトリビュート:オブジェクト
 ID: 2
 item_id: 66
 グループ ID: 64
__proto__: オブジェクト
cid: "c23"
ID: 2
__プロト__: q

しかし、削除リクエストで送信されたヘッダーを見ると、パラメーターが送信されていません。

-----------------------更新パラメーターが送信され、404 が返されます --------------

Yaroslav の推奨に従って、destroy メソッドに「ヘッダー」を追加しましたが、Rails コントローラーはまだDELETE 404 not foundエラーを返しています。リスト項目を返して、破棄する前に正しいものを取得しようとしています。

私のコントローラーは

絶対に破壊する
   listitem = Listitem.find(params[:id])
   return render :json => listitem
 終わり
4

3 に答える 3

30

urlモデル内のを文字列に設定していると思います。

Backbone.Model.extend({
    url: '/list_items',
    //...
});

これにより、Backbone/list_itemsはすべてのアクションのURLとして正確に使用するようになります。次の関数を使用する必要があります。

url: function() { return '/list_items/' + encodeURIComponent(this.id) }

または、文字列を使用してurlRoot、デフォルトの関数に:urlを追加させます。id

urlRoot: '/list_items'
于 2012-06-16T03:21:02.447 に答える
2

どのパラメーターが送信されることを期待していますか? Destroy は、デフォルトで本文や追加ヘッダーなしで、URL によって http 削除要求のみを行います。params 引数は jquery ajax 関数に渡されるため、そこでヘッダーを指定できます。

model.destroy({
...
    headers : {
        your_header : 123
    }
})
于 2012-06-15T06:47:54.413 に答える
0
list_item.destroy( **l** {
  success: function(){
  alert('delete');
}, ... );

その余分なナンバーワンが問題ですか?

于 2012-06-15T05:05:17.850 に答える