2012-07-25 165 views
0

我目前正在尝试将一个简单的Illustrator插件放在一起,并且来自设计背景,这被证明是一项非常艰巨的任务,我对JS有经验,但对Flex没有经验。从Textinput传递给控制器​​文件

我想要做的是在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 

     } 

    } 
} 

回答

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)"/> 

只是另一种方法。

Loic

+0

Thx求救! :) – timkl 2012-07-28 18:08:56

1

首先声明公共财产public var myTextValue : String;在你的控制器。

然后声明双向在MXML结合<mx:TextInput text="@{c.myTextValue}"/>

现在你有myTextValue属性总是包含实际值。

但是很久以前就引入了双向绑定。

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