私はbackbone.jsコレクションにいくつかの特別なプロパティを持っています。私が試してみて、説明するために簡単な例を思い付いた:有効期限を過ぎてもコレクション状態が残っているようです
TestCollection = Backbone.Collection.extend({
properties: {
something: 'foo',
other: 'bar'
}
});
はtest
がURL #test
がヒットしたときに呼び出されるルートであると言います。このメソッドを実行します。
test: function(){
var c = new TestCollection();
console.log(c.properties.something);
c.properties.something = 'changed';
},
私はその後、別のハッシュを訪問し、#anythingelse
を言うし、その後#test
に戻った場合は、コンソールには、まだかなり"foo"
の値よりも、"changed"
をログに記録します。コレクションが作成されるときに状態を「リセット」する必要があります。なぜ私はローカル変数を持っているときに状態を維持していますか?私は_.clone
のようないくつかのプロパティを試して、いくつかのプロパティを "バックアップ"し、それらを初期化関数で取得させるようにしましたが、まだ成功していません。私は何かを誤解しているだけで、簡単な解決策があると思っています。
ただ、すべての 'TestCollection'インスタンスは、共通の' properties'属性は深いコピーに関連していない持っているかどうかということを指摘します。あなたの最初の例では、 'extend'に' properties'を定義すると 'TestCollection.prototype'に追加され、TestCollectionのすべてのインスタンスで利用できる単一の参照を作成しますが、2つ目の例ではTestCollectionインスタンスごとに参照を作成します。 – ggozad
@ ggozad:そうです、OPは 'properties'がコピーされていないときに各インスタンスに深くコピーされることを期待しています。私はそれを明確にしようとしました。 –