1

私は actionscript 3 のモデル ビュー コントローラー フレームワークに比較的精通しています。モデル クラスの変数として数値と文字列のみを使用しました。今、私は基本的にオーバーフローする単一のクラスであるプロジェクトにいます。最初から mvc を使うべきだったのですが、mvc を知らない人がいる新しい仕事に就いています。

とにかく、私の質問は、モデル クラスで配列変数を使用し、これらの配列変数のゲッター/セッターがある場合、「配列の設定」とは何を意味するのでしょうか?

そのセッターにディスパッチ CHANGE イベントがある場合、配列に何かをプッシュまたはシフト解除するとトリガーされますか? 何かをスプライスしたときに呼び出されますか? 配列内のムービークリップのプロパティを変更すると呼び出されますか?

ありがとう!一緒に世界をモデル化、ビュー制御できます!

4

1 に答える 1

2

良い質問。コードが次のようになっているとします。

public function get dataArr():Array
{
   return _dataArr;
}

public function set dataArr(val:Array):void
{
   dispatchEvent(new Event(Event.CHANGE));
   _dataArr = val;
}

modelここで、これらの関数を含むオブジェクトがあるとします。getandset関数は基本的に構文糖衣であることを忘れないでください。したがって、何かが単純な代入のように見えても、それは関数呼び出しです。

// 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);

つまり、次のようなことをするshiftpush、イベントはディスパッチされません。model.dataArrget 関数を使用して配列を返し、その返された配列に対してメソッドを呼び出しています。set 関数が呼び出されないため、イベントがディスパッチされることはありません。

AS3 API 全体で同様のシナリオを見ることができます。たとえば、DisplayObject#transformを取り上げます。内部 set 関数のようなことをするだけdispObj.transform.matrix.tx += 10では呼び出されず、影響はありません。dispObj.transform = someTransformそのため、 set 関数が呼び出されるようにするには、実際に新しい変換を割り当てる必要があります。同じことがあなたにも当てはまります - set 関数が呼び出されてイベントがディスパッチされるように、実際にいくつかの配列を割り当てる必要があります。

于 2013-05-15T03:24:45.443 に答える