我目前正在尝试整合一个简单的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
}
}
}
答案 0 :(得分:1)
首先在Controller中声明公共财产public var myTextValue : String;
。
然后在MXML <mx:TextInput text="@{c.myTextValue}"/>
现在,myTextValue
属性始终包含实际值。
但是很久以前就引入了双向绑定。
或者,您可以向change
实例TextInput
<mx:TextInput id="myTextInput" change="c.myTextValue = myTextInput.text"/>
事件监听器
答案 1 :(得分: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)"/>
只是另一种方法。
卢瓦克