1

我比較熟悉動作腳本3的模型 - 視圖 - 控制器框架。我只在模型類中使用數字和字符串作爲變量。現在我在一個基本上是一個溢出的單個類的項目。我應該從一開始就使用mvc,但是我正在做一個新的工作,那裏有些人不知道mvc,好吧,這並不重要,因爲現在我們需要使用mvc。as3 MVC使用數組作爲模型獲取/設置變量

因此,無論如何,我的問題是如果你在模型類中使用數組變量,並且你有這些數組變量的getter/setter,什麼算作「設置數組」?

如果我對該setter有一個dispatch CHANGE事件,當你將某些東西推入或移出數組時,會觸發這個事件嗎? 拼接出來的東西會被調用嗎? 當您更改數組內的動畫片段屬性時它會被調用嗎?

的感謝! 在一起,我們可以模型查看控制世界!

回答

2

好問題。讓我們假設你的代碼看起來是這樣的:

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

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

現在讓我們假設你有一個對象,說model包含這些功能。請記住,getset函數基本上是語法糖。所以即使有些東西看起來像一個簡單的賦值,它仍然是一個函數調用。

// 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這樣的內部設置功能,永遠不會被調用,並且沒有任何影響。所以你必須爲set函數實際分配一個新的變換dispObj.transform = someTransform來調用。這同樣適用於你 - 你必須實際分配一些數組來調用set函數並調用你的事件。

+0

好的。以及我想要的基本上是當數組完成更改時調度事件。因此,假設您有一些清單頁面的排序按鈕。 model.dataArr是舞臺上實際顯示的內容。該視圖需要點擊輸入並將其發送到控制器。控制器對其進行處理,並可能在其自己的本地_controllerDataArr或_tempDataArr中更改其內容。然後說_model.dataArr = _tempDataArr現在dataArr是正確排序的數組,並且它發送視圖更改來更新自身。你會這樣做嗎? – Jimothy

+0

這應該工作 - 只要你正在做'_model.dataArr = someArray',set函數將被調用並且調度事件。 – user1103976

+0

不錯。謝謝。我讓你知道它是怎麼回事... – Jimothy