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);
    }
});
}

categoriesCollection.create被调用两次。首先用于设置 TagID(在成功请求时它会获得一个 ID),其次用于设置 GID。由于 ID 已设置,不应该在第二次调用时发送 POST 请求而不是 PUT 吗?

我究竟做错了什么?

谢谢

4

1 回答 1

0

标准行为是,POST如果模型是新的(没有属性 ID)则发送 a PUT,如果模型 ID 已设置,则发送 a。

在您的情况下,它按设计工作,如果您希望它用于POST发送 UPDATES,则必须覆盖Backbone.sync才能根据需要工作,但我认为使后端 RESTful 并创建PUT用于更新的侦听器控制器方法更容易.

另一件事,如果我做对了,您正在使用create()更新集合中的模型,我建议您不要这样做,而是save()直接在要更新的模型中使用,代码将更具可读性。

干杯。

于 2012-10-09T12:18:47.480 回答