12

PUT 呼び出し (モデルの更新) を行わない Backbone.js を使用する基本的なアプリケーションがあります。フロントエンドからは、モデルsave関数を呼び出しても PUT 呼び出しは行われません。ただし、これを に置き換えるとdestroy、バックエンドに対して DELETE 呼び出しが行われます。何が問題なのか誰にも分かりますか?PUT リクエストを発行していない関数はsaveTask関数です。

App.Views.Task = Backbone.View.extend({
    template: _.template("<label>ID:</label><input type='text' id='taskId' name='id' value='<%= _id %>' disabled /><br><label>Title:</label><input type='text' id='title' name='title' value='<%= title %>' required/><br><label>Content:</label><input type='text' id='content' name='content' value='<%= content %>'/><br><button class='save'>Save</button>"),
    events: {
        "change input":"change",
        "click .save":"saveTask"
    },
    render: function(eventName){
        $(this.el).html(this.template(this.model.toJSON()));
        //console.log(this.generateTemplate());
        return this;
    },
    change: function(event){
        var target = event.target;
        console.log('changing ' + target.id + ' from: ' + target.defaultValue + ' to: ' + target.value);
        change[target.name] = target.value;
        this.model.set(change);*/
    },
    saveTask: function(){
        this.model.set({
            title:$("#title").val(),
            content:$("#content").val()
        });
        if(this.model.isNew()){
            App.taskList.create(this.model);
        } else {
            this.model.save({});
        }
    }
});
4

4 に答える 4

20

モデルが新しい場合は、保存時に post メソッドが起動されます。ただし、モデルが新しくなく、更新している場合は、PUT が発生します。

これが機能しない場合は、モデルに id プロパティがないことが原因である可能性があります。たとえば、taskID などの別の名前の id を使用している場合は、モデルで idAttribute を taskID に設定する必要があるため、バックボーンこのプロパティを Id として使用すると、すべてが正常になります。

このような:

 var Task= Backbone.Model.extend({
   idAttribute: "taskId"
 });

これは、Idattibute http://backbonejs.org/#Model-idAttributeに関するドキュメントへのリンクです。

また、別の問題は、保存呼び出しの {} である可能性があります

 this.model.save(); 

それ以外の

 this.model.save({});
于 2013-06-20T20:44:47.227 に答える
0

Backbone の同期機能は、私が最終的に使用したものです。'update' を最初のパラメーター ('method' パラメーター) として渡す必要があります。

于 2016-11-01T20:26:23.457 に答える