如何在flex4 / MXML / Spark中从外部文件包含动作脚本功能?

时间:2019-02-24 18:49:37

标签: actionscript-3 flex4.5 mxml

事实证明,无法在嵌入式<fx:Script><![CDATA[中声明类,因此我需要将动作脚本代码放入并包含在外部Sourcefile中。错误已被注释掉

<?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" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="1955" minHeight="1600">
    <fx:Script source="URLRequest.as" />
    <s:layout>
        <s:BasicLayout />
    </s:layout>
    <s:Panel x="0" y="0" width="955" height="600" title="Bypass">
        <s:layout>
            <s:BasicLayout />
        </s:layout>
        <s:Label x="1" y="1" text="Please enter the ɢɪᴛ repository ʜᴛᴛᴘ ᴜʀʟ :"/>
        <s:TextInput x="224" y="1" width="726" id="txtName" text="http://ytrezq.sdfeu.org/flashredirect/?http"/>
        <s:Button x="1" y="12" label="ɢɪᴛ push !" click="send()"/> <!-- Undefined Method method error -->
    </s:Panel>
    <fx:Declarations>
    </fx:Declarations>
</s:Application>

,并在URLRequest.as中:

final public class MyClass {
    // some stuff
}
public function send():void {
    var request:Myclass=new Myclass(txtName.text);
    // Some stuff with 
}

所以问题很简单,但是我找不到任何答案。至少不适用于带有Spark的mxml。
send()不必在班级中,您可以看到它不在班级中。但是它需要使用一个自定义类。

那我该如何从URLRequest.as调用send()

2 个答案:

答案 0 :(得分:2)

我也不太确定您要做什么,但这是一种可能的方法:

在与.mxml文件相同的文件夹中创建一个名为 Myclass.as 的空文件,并插入以下行

package
{
    public class Myclass
    {
        public function Myclass(inp:String)
        {
            trace(inp);
        }
    }
}

现在摆脱

<fx:Script source="URLRequest.as" />

并替换为

<fx:Script>
    <![CDATA[
        public var request:Myclass;
    public function send():void {
        request=new Myclass(txtName.text);
    }
    ]]>
</fx:Script>

答案 1 :(得分:2)

现在我终于了解了您想做什么,我有了另一个想法-有点复杂。

创建一个名为 Dummy.as 的文件,并将其填充为:

package
{
    public class Dummy
    {
        public static function send(url:String):void
        {
            var request:Myclass=new Myclass(url);
        }
    }
}
class Myclass
{
    public function Myclass(inp:String)
    {
        trace(inp);
    }
}

再次,摆脱

<fx:Script source="URLRequest.as" />

并替换为

<fx:Script>
    <![CDATA[
        import Dummy;
    ]]>
</fx:Script>

最后替换

<s:Button x="1" y="12" label="ɢɪᴛ push !" click="send()"/>

使用

<s:Button x="1" y="12" label="ɢɪᴛ push !" click="Dummy.send(txtName.text)"/>

这里的窍门是,我们导入的Dummy类只有一个静态函数,我们可以在不实例化的情况下调用它。 此外-只要在包之外定义它,我们就可以添加更多的类定义,这些定义对于Dummy类是可见的。