11

バックボーン モデルから属性を完全に削除しようとしています。モデルはあまり柔軟ではない API に送信されており、送信するはずの属性に追加の属性を送信すると壊れてしまうため、属性を削除して存在しないようにする必要があります。

この質問model.unsetからを試しましたが、オブジェクトを印刷すると、削除しようとしている属性がまだリストされており、値が null になっています。

属性を完全になくす必要があります。

私の基本的な構造は次のとおりです。

model.unset("AttrName", "silent");
4

3 に答える 3

19

問題は、パラメータをunset間違って使用していることです。"Silent" は別のパラメーターではなく、options hashの一部である必要があります。これは機能します:

model.unset("AttrName", { silent: true });

奇妙な動作の理由は、注釈付きのソースから見ることができます:

unset: function(attr, options) {
  (options || (options = {})).unset = true;
  return this.set(attr, null, options);
},

メソッドは、そのパラメーターがオブジェクトであるとunset想定し、optionsそれを作成または変更しようとしてから、それをsetメソッドに渡します。代わりに文字列を渡すと、コードの意図しない結果として、属性の設定が解除されるのではなく、属性が null に設定されます。

于 2012-10-27T22:06:41.840 に答える
1

モデルの toJSON メソッドをオーバーライドし、送信したい属性のみを含めます。

更新:(コードサンプルを追加)

モデルを拡張するときは、toJSON 関数を追加し、目的の属性を持つオブジェクトを返します。

{
    toJSON : function() {
        return {
            name: this.get('name'),
            age: this.get('age'),
            phoneNumber: this.get('phoneNumber')
        };
    }
}
于 2012-10-27T22:03:09.227 に答える
0

必要なプロパティのみを使用してオブジェクトを作成する (および送信する) こともできます。

serializeModel: function() {
  return {
    email: this.$("#email").val(),
    password: this.$("#password").val()
  }
}
于 2012-10-27T22:09:45.743 に答える