良い質問。コードが次のようになっているとします。
public function get dataArr():Array
{
return _dataArr;
}
public function set dataArr(val:Array):void
{
dispatchEvent(new Event(Event.CHANGE));
_dataArr = val;
}
model
ここで、これらの関数を含むオブジェクトがあるとします。get
andset
関数は基本的に構文糖衣であることを忘れないでください。したがって、何かが単純な代入のように見えても、それは関数呼び出しです。
// like calling some function model.setDataArr([1, 2, 3, 4, 5]);
// so event gets dispatched
model.dataArr = [1, 2, 3, 4, 5];
// liek calling some function model.getDataArr().push(6);
// so setter never gets called and thus event is not dispatched.
model.dataArr.push(6);
つまり、次のようなことをするshift
とpush
、イベントはディスパッチされません。model.dataArr
get 関数を使用して配列を返し、その返された配列に対してメソッドを呼び出しています。set 関数が呼び出されないため、イベントがディスパッチされることはありません。
AS3 API 全体で同様のシナリオを見ることができます。たとえば、DisplayObject#transformを取り上げます。内部 set 関数のようなことをするだけdispObj.transform.matrix.tx += 10
では呼び出されず、影響はありません。dispObj.transform = someTransform
そのため、 set 関数が呼び出されるようにするには、実際に新しい変換を割り当てる必要があります。同じことがあなたにも当てはまります - set 関数が呼び出されてイベントがディスパッチされるように、実際にいくつかの配列を割り当てる必要があります。