1

我对actionscript 3的model-view-controller框架比较熟悉。我在model类中只使用了数字和字符串作为变量。现在我在一个基本上是一个溢出的单一课程的项目中。我应该从一开始就使用 mvc,但是我在一份新工作中,有些人不知道 mvc,好吧,这没关系,因为现在我们需要使用 mvc。

所以无论如何,我的问题是如果你在模型类中使用数组变量,并且你有这些数组变量的getter/setter,那么什么算作“设置数组”?

如果我有该 setter 的调度 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包含这些函数。请记住,get函数set基本上是语法糖。所以即使有些东西看起来像一个简单的赋值,它仍然是一个函数调用。

// 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.dataArr使用 get 函数返回您的数组,然后您在返回的数组上调用方法。由于 set 函数永远不会被调用,因此事件永远不会被调度。

您可以在整个 AS3 API 中看到类似的场景。以DisplayObject#transform为例。当您只是执行诸如dispObj.transform.matrix.tx += 10内部设置函数之类的操作时,永远不会调用并且没有影响。因此,您必须实际dispObj.transform = someTransform为 set 函数分配一个新的转换才能被调用。这同样适用于您 - 您必须为要调用的 set 函数和调度事件实际分配一些数组。

于 2013-05-15T03:24:45.443 回答