Apache flex 从脚本中调用组件
我有一个组件,我想从脚本部分调用它 因此,与其像这样得到它:Apache flex 从脚本中调用组件,apache-flex,custom-component,Apache Flex,Custom Component,我有一个组件,我想从脚本部分调用它 因此,与其像这样得到它: <s:application> <script> </script <ns1:msns includeIn="login" x="482" y="541"> </ns1:msns> </s:application> <s:application> <script> protected function mmshakkoutab(eve
<s:application>
<script>
</script
<ns1:msns includeIn="login" x="482" y="541">
</ns1:msns>
</s:application>
<s:application>
<script>
protected function mmshakkoutab(event:MouseEvent):void
{
var ns1:msns:component = new component();
ns1:msns.x = 5
ns1:msns.x = 5
}
</script
</s:application>
import com.myPackage.msns;
var msns :component = new component()
protected function mmshakkoutab(event:MouseEvent):void{
var msns:component = new component();
msns.x = 5
msns.x = 5
this.addElement(msns);
}
如果我理解正确,那么是的,这是可能的。您认为“调用组件”的术语是非标准的;但我认为您希望在ActionScript中而不是在MXML中创建组件。使用MXML可以执行的任何操作都可以使用ActionScript执行
你有正确的想法;你几乎一路走来;我只想改变一些事情。首先,在ActionScript中导入类;您不会引用MXML名称空间,概念上是这样的:
<s:application>
<script>
</script
<ns1:msns includeIn="login" x="482" y="541">
</ns1:msns>
</s:application>
<s:application>
<script>
protected function mmshakkoutab(event:MouseEvent):void
{
var ns1:msns:component = new component();
ns1:msns.x = 5
ns1:msns.x = 5
}
</script
</s:application>
import com.myPackage.msns;
var msns :component = new component()
protected function mmshakkoutab(event:MouseEvent):void{
var msns:component = new component();
msns.x = 5
msns.x = 5
this.addElement(msns);
}
在脚本块中
创建组件时,需要创建指向该组件的变量。这将对应于MXML中的id字段。ns1:msns:component的语法可能会导致编译器错误。但是,您可以这样创建组件:
<s:application>
<script>
</script
<ns1:msns includeIn="login" x="482" y="541">
</ns1:msns>
</s:application>
<s:application>
<script>
protected function mmshakkoutab(event:MouseEvent):void
{
var ns1:msns:component = new component();
ns1:msns.x = 5
ns1:msns.x = 5
}
</script
</s:application>
import com.myPackage.msns;
var msns :component = new component()
protected function mmshakkoutab(event:MouseEvent):void{
var msns:component = new component();
msns.x = 5
msns.x = 5
this.addElement(msns);
}
我在这里要提到,通常的惯例是将组件名称大写。不过,您使用小写字母在语法上并没有错误
然后设置组件的属性,这是您已经在做的:
msns.x = 5
msns.x = 5
最后——这是您缺少的步骤——您必须将新组件添加到容器中。如果您正在处理Spark容器或MX容器,则可以使用。因为在您提供的父容器示例中是spark应用程序,所以我将使用addElement:
this.addElement(msns);
因此,您的代码块将被重新编写如下:
<s:application>
<script>
</script
<ns1:msns includeIn="login" x="482" y="541">
</ns1:msns>
</s:application>
<s:application>
<script>
protected function mmshakkoutab(event:MouseEvent):void
{
var ns1:msns:component = new component();
ns1:msns.x = 5
ns1:msns.x = 5
}
</script
</s:application>
import com.myPackage.msns;
var msns :component = new component()
protected function mmshakkoutab(event:MouseEvent):void{
var msns:component = new component();
msns.x = 5
msns.x = 5
this.addElement(msns);
}
有一件事你应该考虑阅读。每个Flex组件都经过它;某些事情是为了特定的目的按特定的顺序进行的。对于创建子项,您最好扩展createChildren(),尤其是如果您希望在应用程序标记的初始设置中创建组件 要以编程方式实例化组件而不是声明性实现,请使用addElement()
将组件添加到显示列表中
例如,将可视元素添加到名为container
的Spark组
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
creationComplete="creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.core.UIComponent;
import mx.events.FlexEvent;
protected function creationCompleteHandler(event:FlexEvent):void
{
var component:UIComponent = new UIComponent();
component.x = 5;
component.y = 5;
container.addElement(component);
}
]]>
</fx:Script>
<s:Group id="container" />
</s:Application>
如果假设您的组件是ActionScript,即扩展到sprite,您可以这样做
protected function creationCompleteHandler(event:FlexEvent):void
{
var yourASClassObj:ASClass = new ASClass();
var component:UIComponent = new UIComponent();
this.addElement(component);
component.addChild(yourASClassObj);
}
我必须+1这个,即使我们在同一时间写下了各自的答案。:-)谢谢各位,我明天上班的第一件事就是:D