1

私は現在アプリに取り組んでいます。グループを作成すると、保存機能がうまく機能し、モデルがコレクションに追加され、データベースに保存されますが、作成したばかりのグループを編集したい場合は、保存を押すとデータが編集されて PUT リクエストが起動される代わりに、新しいモデルが作成されます (および POST リクエスト)。これが私の保存機能です。既存のモデルを編集するときに PUT リクエストを発行しない理由はありますか?

GroupModalHeaderView.prototype.save = function(e) {
  var $collection, $this;
  if (e) {
    e.preventDefault();
  }

  $this = this;
  if (this.$("#group-name").val() !== "") {
    $collection = this.collection;
    if (this.model.isNew()) {
      this.collection.add(this.model);
    }
    return this.model.save({ name: this.$("#group-name").val()}, {
      async: false,
      wait: true,
      success: function() {
        var modelID = $this.model.get('id');

        return this.modal = new app.GroupModalView({
          model: $this.collection.get(modelID),
          collection: $this.collection
        });
      }
    });
  }

};

これは私のモデルのデフォルトです。

Group.prototype.defaults = {
  user_id: "",
  name: "New Group",
  email: "",
  url: "",
  telephone: "",
  mobile: "",
  fax: "",
  people: ""
};

this.model保存前のconsole.logはこちら、

    Group {cid: "c116", attributes: Object, _changing: false, _previousAttributes:    Object, changed: Object…}
        _changing: false
        _events: Object
        _pending: false
        _previousAttributes: Object
        email: ""
        fax: ""
        mobile: ""
        name: "New Group"
        people: ""
        telephone: ""
        url: ""
        user_id: ""
        wait: true
        __proto__: Object
        attributes: Object
        changed: Object
        cid: "c116"
        collection: GroupCollection
        id: 189
        __proto__: ctor
4

1 に答える 1

1

Backbone.js が PUT ではなく POST リクエストを発行する理由は、モデルに一意の識別子がid関連付けられていないためです。モデルに関連付けられた属性がない場合id、Backbone.js は常に POST リクエストを発行して新しい属性を保存します。 db へのエントリ。

バックボーンのウェブサイトから:

save model.save([attributes], [options]) ... モデルが New の場合、

保存は「作成」(HTTP POST) になります。モデルがサーバーに既に存在する場合、保存は「更新」(HTTP PUT) になります。

詳細については、この SO の質問をお読みください。

于 2013-07-17T10:59:52.677 に答える