1

私はidがユーザーによって書かれなければならないコードであるモデルを持っています、そしてこのコードはDBの主キーになります。

したがって、新しいレジスタを作成するにはコードを記述する必要がありますが、save()メソッドを呼び出すと1つのPOSTが必要ですが、de idAttributeには値があるため、常に1つのPUTを取得します。

これは非常に単純化された私のモデルです

Course = Backbone.Model.extend({
    idAttribute: "courseCode"
});
4

2 に答える 2

2

ジャックがコメントしたように、 idAttributeではなくidを使用する必要があります。(誤解していない限り、サーバー上の主キーの名前です。その場合は続行してください。)courseCode

モデルがsave()を使用して永続化されるか、POSTsave ()PUTを呼び出すときに永続化されるかは、isNew()関数によって異なります。デフォルトの実装では、 idをnullと比較して、モデルがまだ保存されているかどうかを判断します。レコードを作成するか更新するかを決定するには、独自のisNew関数を実装する必要があります。たとえば、次のようなことを試すことができます。

Course = Backbone.Model.extend({
    isNew: function() {
        return !this.has('uniquePropertySetByServer');
    }
});
于 2013-01-02T21:23:12.030 に答える
1

ジャックが述べたように、最初の問題は、を使用idAttributeする必要があるときに使用している可能性があるようですid。それはさておき、PUTに関する問題は2つの方法で解決できます。

1つ目は、代わりにPOSTを使用するようにBackboneに指示することです。これを行う1つの方法はisNew、Asheley Rossが提案したように、モデルを上書きすることです。または、BackboneにネイティブisNewメソッドを使用させ、ID属性を削除することでモデルを新しいものとして処理するように強制することもできます(ネイティブisNewチェックは単なるthis.id == null)。次に、IDを別の属性で渡すか、モデルのプロパティ(属性ではなく)として保存し、モデルのtoJSONメソッドを使用して、サーバーに送信する直前にIDを追加し直すことができます。

GETとPOSTを除くすべてのHTTP操作を回避できる2番目の方法は、を設定することBackbone.emulateHTTPBackbone = true;です。これにより、Backboneは代わりにPOSTを使用X-HTTP-Method-Overrideし、実際のタイプ(例PUT)を含む追加のリクエストヘッダーを渡すだけになります。

于 2013-01-02T21:25:45.567 に答える