timkl
timkl

Reputation: 3339

Pass value from Textinput to Controller file

I am currently trying to put together a simple Illustrator plugin, and coming from a design background this is proving to be quite a task, I have experience with JS, but not with Flex.

What I want to do is to have a panel in Illustrator, with an input field and a button. You type something in the input and press the button and a text frame with the desired text is added to the canvas.

But how do I pass the value from a mx:Textinput to the Controller.as file? I couldn't find an answer on the web.

This is my main.mxml file:

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

And this is my Controller.as file:

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

        }

    }
}

Upvotes: 0

Views: 266

Answers (2)

Loic
Loic

Reputation: 2193

You might also pass the string directly to the c.run() call.

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

and then

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

Just another approach.

Loic

Upvotes: 1

skovalyov
skovalyov

Reputation: 2099

First declare public property public var myTextValue : String; in your Controller.

Then declare bidirectional binding in your MXML <mx:TextInput text="@{c.myTextValue}"/>

Now you have myTextValue property always containing the actual value.

But bidirectional binding was introduced not that long time ago.

Alternatively, you can add a change event listener to your TextInput instance <mx:TextInput id="myTextInput" change="c.myTextValue = myTextInput.text"/>

Upvotes: 1

Related Questions