每次更新數組中的值時,我都需要更改文本字段,並且試圖將代碼放入setter中。但是,代碼沒有被調用。即使我這樣做陣列setter不會做任何事情
public function set resources(value:*) {
//this function does not seem to matter at all
}
什麼也沒有發生。我認爲AS3重寫數組的setter,除了插入changeTextFields()之外,我如何獲得其他功能。每次我改變陣列?
每次更新數組中的值時,我都需要更改文本字段,並且試圖將代碼放入setter中。但是,代碼沒有被調用。即使我這樣做陣列setter不會做任何事情
public function set resources(value:*) {
//this function does not seem to matter at all
}
什麼也沒有發生。我認爲AS3重寫數組的setter,除了插入changeTextFields()之外,我如何獲得其他功能。每次我改變陣列?
我會以相反的順序滿足您的觀點:
有知道內部數組值發生變化的任何編程方法。作爲程序員,當您知道值已更改時,您必須執行一些通知操作(例如,引發事件或調用函數)。在你的情況下,每當數值發生變化時,這就是調用changeTextFields()
方法。
這與setters
沒有直接關係。即對陣列設定器或任何其他類型的方法沒有任何特殊的行爲。
所有制定者要做的就是讓你把一個方法作爲可變對象屬性(也就是你用=
運營商,而不是圓括號中調用它們):
public class SetterExample {
private var _resources:* = null;
// Example setter method.
public function set resources(value:*) {
this._resources = value;
}
// Regular method.
public function assignResources(value:*) {
this._resources = value;
}
}
/*===============================
// Later on:
===============================*/
var ex:SetterExample = new SetterExample();
// Here we use the '=' symbol instead of round brackets to invoke the setter.
ex.resources = object1;
// This is not a setter, so we invoke 'assignResources' with the round brackets, passing in our parameters.
ex.assignResources(object1);
爲了得到一個事件在修改數組實例時調度,將數組包裝在mx.utils.ArrayCollection中。
不要讓mx.utils
Flex軟件包嚇到你......通過「合併」鏈接,這個類的用法不應該增加你的SWF,因爲它沒有多大用處。
當您想要通知對基本Object實例所做的更改時(例如:將它們用作關聯陣列時),會出現類似問題。在這種情況下,要通知更改Object實例,請將實例包裝在ObjectProxy中。這是在mx.collections
,但也是AS3項目的一個非常輕量級的包含。