如何使用自定义idAttribute更新模型

时间:2012-10-09 10:39:15

标签: backbone.js requirejs

在我的简单主干应用程序中,我正在尝试更新模型,并且每次发送一个put请求而不是post。

嗯,这是我的名为 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;
});

这是我在视图中的方法

<{1>}

上的

keychange event

on 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

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

我做错了什么?

由于

1 个答案:

答案 0 :(得分:0)

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

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

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

干杯。