3

Backbone について質問があります。モデルのすべての属性を空に設定するにはどうすればよいですか?

unsetmodel.unset(attribute, [options]) 
Remove an attribute by deleting it from the internal attributes hash. Fires a "change" event unless silent is passed as an option.

ただし、これは個々のプロパティを 1 つずつ設定解除することのみを目的としています。

誰でもアイデアはありますか?

グレッツ、

4

3 に答える 3

7

バックボーン サイトから:

clearmodel.clear([オプション])

id 属性を含むすべての属性をモデルから削除します。サイレントがオプションとして渡されない限り、「変更」イベントを発生させます。

だから私は次のようなことをします:

myModel.clear();

属性を保持したい場合は、それらすべてを反復処理して手動で設定してみませんか?

$.each(this.model.attributes, function(index, value){
    // set them manually to undefined
});
于 2013-02-08T12:17:55.877 に答える
3

これが古い投稿であることは知っていますが、最近、同様の問題に遭遇しました。主に、1 つずつ設定を解除すると、複数のchangeイベントが発生し、モデルはそれぞれの中間状態になります。後で適切な変更イベントを発生させてこれを可能にするには、それらを 1 つずつサイレントに設定解除し、設定解除後にそれぞれの変更イベントを手動で起動する必要があります。ただし、バックボーン コードを見ると、このunsetメソッドが実際にはオプションsetで を呼び出しているだけであることがわかり{unset:true}ます。したがって、代わりにこれを行うことができるはずです:

model.set({ attr1: undefined, attr2: undefined, attr3: undefined }, { unset: true })

実際に試したことはありませんが、理論上は確実に機能するはずです。すべての設定解除が完了すると、change属性ごとに一連のイベント発生します。このアプローチは、バックボーン ソースの公開されていないロジックを使用するため、推奨されるパスから少し外れていますが、この特定のコードは数年間変更されていないためset(そして、実際にはそれ以前にオプションとしてサポートされていたようです)、それを使用する必要があります。安心して使い続けてください。

于 2014-09-26T16:52:36.867 に答える
1

attributesキーを保持しながら、すべてのプロパティを未定義に設定する組み込みメソッドはありません。良いニュースは、アンダースコアのワンライナーを使用して自分で簡単に作成できることです。

Backbone.Model.prototype.clearValues = function(options) {
  this.set(_.object(_.keys(this.attributes), []), options);
}

すべてのモデルにはclearValuesメソッドがあります。

var model = new Model({
  id:1, 
  foo:'foo', 
  bar:'bar'
});
model.clearValues();

console.log(model.toJSON()); //-> {id: undefined, foo: undefined, bar: undefined} 
于 2013-02-08T12:45:43.337 に答える