我有主要應用程序,其中包含ModuleManager
。這個應用程序加載了不同的模塊。主應用程序和加載的模塊都使用我的自定義RSL。我需要在我的RSL中獲取Class對象,這是在其中一個模塊中定義的。我試圖使用getDefinitionByName
函數,但由於我的類沒有在RSL中定義,所以我得到一個異常(雖然加載了需要的類的模塊)。是否可以使模塊類對RSL代碼可見並在運行時獲取它的實例而不更改項目結構?謝謝getDefinitionByName()和類的可見性
2
A
回答
1
如果您在類型Class的Module(或其接口)上公開某個屬性,則可以注入該類的定義,類似於將類定義注入按鈕以製作圖標。
所以,你的模塊可能有這樣的代碼:
protected var _classToMake:Class;
public function get classToMake():Class {
return _classToMAke;
}
public function set classToMake(value:Class):void {
if (value != _classTomake) {
if (value != null) {
//test to make sure we're making the right thing
var testClass:SomeType = new value() as SomeType;
if (testClass != null) {
_classToMake = value
} else {
trace('classToMake must be a definition that makes a class of SomeType');
}
}
}
}
1
當加載一個新模塊,指定的應用程序域。正如文檔所述:
"The ApplicationDomain class is a container for discrete groups of class definitions."
您在加載SWF時指定應用程序域作爲加載程序上下文的一部分。
一旦你的模塊中加載到應用程序域的引用,你可以調用應用程序域的getDefinition()
方法來獲取定義,在大致相同的方式作爲getDefinitionByName()
另請參見下面的文檔「使用應用程序域」,以瞭解它們的工作原理。
http://help.adobe.com/en_US/as3/dev/WSd75bf4610ec9e22f43855da312214da1d8f-8000.html
而這裏的例子的複製粘貼,只是櫃面就是跑開了:
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
public class ApplicationDomainExample extends Sprite
{
private var ldr:Loader;
public function ApplicationDomainExample()
{
ldr = new Loader();
var req:URLRequest = new URLRequest("Greeter.swf");
var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
ldr.load(req, ldrContext);
}
private function completeHandler(event:Event):void
{
var myGreeter:Class = ApplicationDomain.currentDomain.getDefinition("Greeter") as Class;
var myGreeter:Greeter = Greeter(event.target.content);
var message:String = myGreeter.welcome("Tommy");
trace(message); // Hello, Tommy
}
}
}
相關問題
- 1. AS3中getDefinitionByName和getDefinitionByName之間的區別
- 2. CRTP和類型的可見性
- 3. Loader.loadBytes和getDefinitionByName
- 4. 類定義的可見性
- 5. OSGi超類的可見性
- 6. c#嵌套類和可見性?
- 7. 嵌套類C++中的可訪問性和可見性
- 8. 抽象類中的屬性可見性
- 9. 降低基類屬性的可見性
- 10. 父類中類變量的可見性
- 11. NodeJS和ES6類實例中可變的可見性
- 12. 綁定的DataTemplate父項的可見性(可見性或可見性),以在ViewModel
- 13. StackPanel可見性VS網格可見性
- 14. groovysh和groovy類的可見性和註解解析
- 15. COM類的可見性:C#到VB6
- 16. 內部類的泛型可見性?
- 17. F#類型的可見性問題
- 18. 名稱空間中類的可見性
- 19. 控制導入類別的可見性
- 20. Onclick更改類的可見性
- 21. 切換欄的可見性使用類
- 22. C中可見性的系統類型#
- 23. 類圖屬性可見性。公共屬性可以有getter和setter操作?
- 24. 將XAML中的可見性綁定到可見性屬性
- 25. AngularJS的可見性
- 26. ProgressBar的可見性
- 27. CompareValidator的可見性
- 28. Javascript:可見性
- 29. SimpleExoPlayerView可見性
- 30. 可以在UML類圖上顯示類的可見性嗎?
我認爲你需要在你的類的頂部'getDefinitionByName添加'import'聲明'去工作。 – 2012-02-23 11:35:37
@Laurent我的RSL不知道模塊的任何信息,編譯時無法使用它 – 2012-02-23 11:38:56
也許您正在將模塊加載到錯誤的應用程序域中,以便使用RSL中的getDefinitionByName進行訪問。這是有道理的,每個模塊被加載到一個獨特的一個,以避免類衝突。 – 2012-02-23 12:54:57