0

我目前正在尝试组合一个简单的 Illustrator 插件,并且来自设计背景,这被证明是一项艰巨的任务,我有 JS 经验,但没有 Flex 经验。

我想要做的是在 Illustrator 中有一个面板,带有一个输入字段和一个按钮。您在输入中键入内容并按下按钮,然后将带有所需文本的文本框添加到画布中。

但是如何将值从 mx:Textinput 传递到 Controller.as 文件?我在网上找不到答案。

这是我的 main.mxml 文件:

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" historyManagementEnabled="false">
    <mx:Script>
        <![CDATA[
            private var c:Controller = new Controller();
        ]]>
    </mx:Script>

    <mx:VBox height="100%" width="100%" verticalAlign="middle" horizontalAlign="center">
        <mx:Label text="myVariable"></mx:Label>
        <mx:TextInput name="TextValue"/> // I want the text value to be passed to the Controller class so I can pass it on to my JSX function
        <mx:Button label="Run" click="c.run()"/>
    </mx:VBox>

</mx:Application>

这是我的 Controller.as 文件:

package
{
    import flash.external.HostObject;

    public class Controller
    {
        [ Embed (source="myScript.jsx" , mimeType="application/octet-stream" )]

        private static var myScriptClass:Class;

        public function run():void {
            var  jsxInterface:HostObject = HostObject.getRoot(HostObject.extensions[0]);
            jsxInterface.eval( new myScriptClass ().toString());

            //calling from AS to JSX
            jsxInterface.myJSXFunction (myVariable); //This is where I want the value to be passed to

        }

    }
}
4

2 回答 2

1

public var myTextValue : String;首先在控制器中声明公共属性。

然后在您的 MXML 中声明双向绑定<mx:TextInput text="@{c.myTextValue}"/>

现在您拥有myTextValue始终包含实际值的属性。

但是双向绑定是在不久前引入的。

或者,您可以将change事件侦听器添加到您的TextInput实例<mx:TextInput id="myTextInput" change="c.myTextValue = myTextInput.text"/>

于 2012-07-25T12:46:23.453 回答
1

您也可以将字符串直接传递给 c.run() 调用。

public function run(myString:String):void {
...
    jsxInterface.myJSXFunction (myString)
...

进而

<mx:TextInput id="TextValue"/>
<mx:Button label="Run" click="c.run(TextValue.text)"/>

只是另一种方法。

洛伊克

于 2012-07-25T23:04:03.970 回答