2008年11月09日
Flash | AS3でRemote Shared Object
SharedObject - ActionScript 3.0 言語およびコンポーネントリファレンスガイドsetDirty() メソッド
SharedObject.setProperty() メソッドは、setDirty() を実装します。ほとんどの場合、たとえばプロパティの値がストリングや数値のようなプリミティブ型のときは、setProperty() を呼び出すことが可能で、setDirty() を呼び出す必要はありません。ただし、プロパティの値が独自のプロパティを持つオブジェクトである場合は、setDirty() を呼び出してオブジェクト内の値が変更された日時を示します。
もう、なんで?というAS仕様に悩むこと2時間。
FMSのRemote Shared Objectを使うプログラムを初めてAS3で書いてたんだけど、AS側から
so.data['key'].name = value;と、RSOのデータを変更してもサーバにこの変更が伝わらない。
オレ様のコードは正しいはずなのに…と、この辺りの書き方をいろいろアレンジしてみたが直らない。で、ドキュメントを読み直していたら、AS2の時とは挙動が変わってた。
新しくsetProperty() や setDirty() メソッドが追加されており、RSOのプロパティ値を変更する場合は基本的には setProperty() メソッドを使うようだ。データがObjectやArrayの場合でその中身だけ変更した場合とかは、setDirty() を明示的に呼び出す必要がある。なので、上記のコードは
so.data['key'].name = value;
so.setDirty('key');とすることで、サーバまで変更が伝わるようになった。
因みに、上で引用しているドキュメントの「setDirty() を呼び出してオブジェクト内の値が変更された日時を示します。」の、最後の「変更された日時を示します」は誤訳っぽい印象。
Comment