Как включить функцию actionscript из внешнего файла в flex4 / MXML / Spark? - PullRequest
0 голосов
/ 24 февраля 2019

Оказывается, невозможно объявить класс внутри встроенного <fx:Script><![CDATA[, поэтому мне нужно поместить и включить код actionscript во внешний 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 
}

Так что вопрос простой, но я нигде не смог найти ответ.По крайней мере, не для for mxml с Spark.
send() не обязательно должен быть в классе и, как вы можете видеть, находится вне класса.Но для этого нужно использовать собственный класс.

Итак, как мне вызвать send() из URLRequest.as?

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Теперь, когда я наконец-то понял, что вы хотите сделать, у меня есть еще одна идея, которая немного сложнее.

Создайте файл с именем 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.

0 голосов
/ 27 февраля 2019

Я тоже не совсем уверен, что вы пытаетесь сделать, но вот возможный способ:

Создайте пустой файл с именем Myclass.as в той же папке, что и ваш.mxml файл и вставьте эти строки

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>
...