2011-11-01 97 views
2

每次更新數組中的值時,我都需要更改文本字段,並且試圖將代碼放入setter中。但是,代碼沒有被調用。即使我這樣做陣列setter不會做任何事情

public function set resources(value:*) { 
    //this function does not seem to matter at all 
} 

什麼也沒有發生。我認爲AS3重寫數組的setter,除了插入changeTextFields()之外,我如何獲得其他功能。每次我改變陣列?

回答

2

我會以相反的順序滿足您的觀點:

  1. 有知道內部數組值發生變化的任何編程方法。作爲程序員,當您知道值已更改時,您必須執行一些通知操作(例如,引發事件或調用函數)。在你的情況下,每當數值發生變化時,這就是調用changeTextFields()方法。

  2. 這與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); 
0

爲了得到一個事件在修改數組實例時調度,將數組包裝在mx.utils.ArrayCollection中。

不要讓mx.utils Flex軟件包嚇到你......通過「合併」鏈接,這個類的用法不應該增加你的SWF,因爲它沒有多大用處。

當您想要通知對基本Object實例所做的更改時(例如:將它們用作關聯陣列時),會出現類似問題。在這種情況下,要通知更改Object實例,請將實例包裝在ObjectProxy中。這是在mx.collections,但也是AS3項目的一個非常輕量級的包含。