gpt4 book ai didi

css - Flex Widgets - 样式的继承

转载 作者:行者123 更新时间:2023-11-28 13:07:29 27 4
gpt4 key购买 nike

我有一个主应用程序 (Flex 4.6),我打算在其中使用任意数量的小部件。小部件是 .swf 文件(s:Module OR s:Application, Flex 4.6)。

我的问题是加载的小部件不继承正在使用它的应用程序的样式。

简而言之,我将小部件作为 .swf 文件从服务器加载(使用 URLLoader 类)。下载后,我创建了小部件的实例(而单个小部件可以在主应用程序中的多个不同位置共同包含 - 相乘)。

在主应用程序中,使用了以下 CSS 文件:

<fx:Style source="css/common.css" />

common.css 内容为:

s|TextInput {
contentBackgroundColor: #9FD1F2;
focusColor: #8FD7F9;
skinClass: ClassReference("skins.textInputTestSkin");
}


s|Label {
color: #2211FF;
}

这就是我创建和加载小部件的方式:

private var bytesLoader:Loader = null;
public var loadedApp:SystemManager = null;
public var loadedModule:Module = null;

...

bytesLoader.addEventListener(Event.COMPLETE, onBytesLoaderComplete);
var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
bytesLoader.loadBytes(urlLoader.data, context);

...


private function onBytesLoaderComplete(e:Event):void {
var dataContent:DisplayObject = bytesLoader.content;

//(Application)
if(dataContent && (dataContent is SystemManager)) {
loadedApp = dataContent as SystemManager;
loadedApp.addEventListener(FlexEvent.APPLICATION_COMPLETE,appWidgetCreationComplete);

appHolder.addChild(dataContent);
} else if(dataContent is IFlexModuleFactory) {
//(Module)
var moduleLoader:LoaderInfo = LoaderInfo(e.target);
moduleLoader.content.addEventListener("ready", moduleWidgetReadyHandler);
}
}



private function moduleWidgetReadyHandler(e:Event):void {
var factory:IFlexModuleFactory = IFlexModuleFactory(e.target);
if(factory) {
loadedModule = factory.create() as Module;

if(loadedModule) {
this.addElement(loadedModule);
}
}
}

我的问题是,首先,我可以用什么方式在小部件上应用父级的样式,其次(s:Module),我可以用什么方式将父级的样式应用到小部件上小部件(s:应用程序)。

更新 1

如果我在每个小部件中更改 getter moduleFactory(如下所示),样式设置就会恰到好处。这意味着小部件(模块和应用程序)中的 textInput 与主应用程序具有相同的外观。

override public function get moduleFactory():IFlexModuleFactory {
return FlexGlobals.topLevelApplication.moduleFactory;
}

这是解决方法?这是好的解决方案吗?

最佳答案

好的,这是一个解决方案:

bytesLoader.loadBytes(urlLoader.data, context);之前添加

    //init - moduleFactory
bytesLoader.contentLoaderInfo.addEventListener(Event.INIT, onContentLoaderInfoInit);


private function onContentLoaderInfoInit(e:Event):void {
if(bytesLoader && bytesLoader.contentLoaderInfo) {
bytesLoader.contentLoaderInfo.removeEventListener(Event.INIT, onContentLoaderInfoInit);
}

var loaderInfo:LoaderInfo = LoaderInfo(e.target);
loaderInfo.content.addEventListener(Request.GET_PARENT_FLEX_MODULE_FACTORY_REQUEST, onGetParentModuleFactoryRequest);
}


private function onGetParentModuleFactoryRequest(r:Request):void {
if(isGlobalStyleAllowed) {
if ("value" in r) {
r["value"] = FlexGlobals.topLevelApplication.moduleFactory;
}
}

//remove eventListener
if(bytesLoader && bytesLoader.contentLoaderInfo) {
var loaderInfo:LoaderInfo = LoaderInfo(bytesLoader.contentLoaderInfo);
loaderInfo.content.removeEventListener(Request.GET_PARENT_FLEX_MODULE_FACTORY_REQUEST, onGetParentModuleFactoryRequest);
}
}

这是有效的。

关于css - Flex Widgets - 样式的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772340/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com