0

私の単純なバックボーン アプリケーションでは、モデルを更新しようとしていますが、投稿の代わりにプット リクエストを送信するたびに。

さて、これはcategoryModelという名前の私のモデルです

define(['Backbone'], function (Backbone) {
var CategoryModel = Backbone.Model.extend({
    defaults: {
        ID: '',
        Name: 'Empty',
        TagID: '0',
        GID: '0'
    },
    idAttribute: "ID",
    initialize: function () {
        if (!this.get('Name')) {
            this.set({ 'Name': this.defaults.Name });
        }
    }
});

return CategoryModel;
});

これがコレクションです

define(['Backbone','../../models/categories/categoryModel'], function (Backbone, categoryModel) {
var CategoryCollection = Backbone.Collection.extend({
    url: '/parentcategory/Actions',
    model: categoryModel
   });

return new CategoryCollection;
});

ビュー内の私のメソッドは次のとおりです

上にkeychange event

createNewItem: function (e) {
    var $this = $(e.currentTarget);
    $('#selectedCategoryName').html($this.val());
    //it creates a new model
    globals.NewCategory = new CategoryModel({ Name: $this.val() });
}

の上handleDrop event

handleDropEvent: function (event, ui) {
var draggable = ui.draggable;
//check if name has set
if (!globals.NewCategory) {
    alert("Please write a category name");
    $('#createNewCategory').focus();
    return;
}
//get itemID
var itemID = draggable.attr("id").split('_')[1];
var itemDesc = draggable.attr("id").split('_')[0];
//check items category
if (itemDesc == "Tag") {
    //check if tagID already exists
    if (globals.NewCategory.TagID) {
        alert("you have already specify a tag from this category");
        return;
    }
    globals.NewCategory.set("TagID", itemID);
} else if (itemDesc == "gTag") {
    if (globals.NewCategory.GID) {
        alert("you have already specify a tag from this category");
        return;
    }
    globals.NewCategory.set("GID", itemID);
}
categoriesCollection.create(globals.NewCategory, {
    silent: true,
    wait: true,
    success: function (model, response) {
        model.set("ID", response);
        alert(model.id);
    }
});
}

categoryCollection.createが 2 回呼び出されます1 つ目は TagID を設定するため (成功したリクエストでは ID を取得します)、2 つ目は GID を設定するためです。ID が設定されているので、2 回目の呼び出しで PUT の代わりに POST 要求を送信するべきではなかったのでしょうか?

私は何を間違っていますか?

ありがとう

4

1 に答える 1

0

標準的な動作ではPOST、モデルが新しい場合 ( ID 属性が設定されていないPUT場合) を送信し、モデル ID が設定されている場合は を送信します。

あなたの場合、それは設計どおりに機能しています.UPDATESを送信するために使用したい場合は、 Backbone.syncPOSTをオーバーライドして必要に応じて機能させる必要がありますが、バックエンドをRESTfulにし、更新用のリスナーコントローラーメソッドを作成する方が簡単だと思います. .PUT

もう 1 つcreate()は、コレクション内のモデルを更新するために使用していることが正しければ、それを行わずに、save()更新するモデルで直接 を使用することをお勧めします。コードははるかに読みやすくなります。

乾杯。

于 2012-10-09T12:18:47.480 に答える