簡體   English   中英

代理類可以在現有類的AS3中使用嗎?

[英]Can the Proxy class be used in AS3 on existing classes?

AS3 Proxy類擴展了Object並公開了可以重寫的方法,以通用方式處理對象上屬性的添加/刪除和獲取/設置。

似乎現有的對象(例如MovieClip,Sprite等)並不繼承於Proxy類,因此似乎排除了將此類功能添加到現有顯示對象類的可能性。

我已經創建了一個布局框架,該框架具有一個名為GUIControl的基礎顯示對象類,該類繼承自MovieClip ,我希望通過重寫Proxy類的setProperty方法為其添加數據綁定功能,因此可以使用單個處理程序來處理屬性分配。使所有屬性默認情況下都充當綁定源。

有什么方法可以在現有類上利用Proxy類的功能,還是我會基於Proxy從頭開始構建類?

您可以為MovieClip創建包裝器類,並在包裝​​器上設置屬性。 您應該覆蓋Proxy中的其他功能,並在MovieClip上調用相關功能。

這是一個例子

import flash.display.MovieClip;
import flash.utils.Proxy;
import flash.utils.flash_proxy;

public class MovieClipWrapper extends Proxy
{
    public function MovieClipWrapper(target:MovieClip)
    {
        super();

        _target = target;
    }

    private var _target:MovieClip;

    override flash_proxy function setProperty(name:*, value:*):void
    {
        //set data on target movieClip, or call the notify functions
    }

}

不可以,不能在現有的類上使用。 最糟糕的是,它禁止在任何顯示列表類上使用代理。 無法更改顯示列表類上的屬性並使代理類攔截並處理此類屬性值的設置或獲取。 代理僅作為新類(理想情況下為動態類)的基類有用,當您設置/撤消/刪除屬性時,您要在其中攔截和運行邏輯。

此外,由於Proxy的接口方法僅依賴QName和String型鍵,因此Proxy對於嘗試包裝Dictionary類之類的東西毫無用處,這使得無法枚舉,獲取或設置使用對象實例作為鍵的Dictionary值。 ..字典支持的東西與關聯數組或普通對象不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM