【问题标题】:How to include an actionscript function from an external file in flex4/MXML/Spark?如何在 flex4/MXML/Spark 中包含来自外部文件的 actionscript 函数?
【发布时间】:2019-02-24 18:49:37
【问题描述】:

事实证明,在嵌入式<fx:Script><![CDATA[ 中声明一个类是不可能的,所以我需要将动作脚本代码放入并包含在外部源文件中。错误被注释掉

<?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()

【问题讨论】:

  • 您发布的内容非常令人困惑:1. 您应该避免创建一个名为 URLRequest 的类,以避免显式转换和其他恶作剧,因为已经有一个名为 URLRequest 的 as3 类,2.@ 987654328@ 似乎没有定义。请让您和其他人更容易理解/测试您的代码
  • @GeorgeProfenza 我犯了一个错误:帖子已编辑。实际上,我通过在 Urlrequest 中的部分重新实现发现了一个安全问题,因此我忘记了更改名称。不再令人困惑
  • 文件名应与类名相同。如果您的班级名称是 MyClass,那么文件名必须是 MyClass.as 并且不能是其他名称。此外,您的类文件的结构错误:顶部定义是 package 然后是 class 然后方法是在类内部而不是外部定义的。
  • @Organis 除了当你阅读 send()method 不在课堂上,据我所知这是不需要的。据我了解,我也不需要声明一个包。如果我错了,请纠正我。
  • 每个 AS3 类都是一个单独的文件。 AS3 类文件与可包含的 ActionScript 文件完全不同。如果您想使用类,那么正如我在上面指出的那样,您做错了。如果您只需要在一个单独的文件中包含一段 ActionScript 代码以便可以将其包含在 fx:Script 标记中,那么您不应该在该文件中声明一个类。

标签: actionscript-3 flex4.5 mxml


【解决方案1】:

现在我终于明白你想要做什么了,我有另一个想法 - 有点复杂。

创建一个名为 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 类是可见的。

【讨论】:

  • 您指的是 source 属性?是的,这似乎是外包所有 ActionScript 需求的方便场所。不幸的是,这不是初衷。正如文档所说,您可以放入变量和函数定义,但不可能在其中定义类。它类似于 include 语句。所以我担心如果你想为这两种情况都有一个文件,我上面的答案就是要走的路。
【解决方案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>

【讨论】:

  • 真的没有办法把所有的actionscript代码放在同一个文件里吗?
猜你喜欢
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
相关资源
最近更新 更多