0

我有一个带有 tabnavigator 和 textarea 的创建字符组件。在我的主应用程序中,我想将 textarea id - mainchar 文本保存到标签中。我尝试了dotnotation,什么都没有,我尝试了 import components.CreateCharacter; 仍然一无所获,并尝试了在网上找到的其他一些选项,但无法使其正常工作。

请注意,如果我在主应用程序中调用组件,代码工作正常,所以代码工作正常,它只是组件文件夹中组件(CreateCharacters)的调用。components 文件夹位于 src 文件夹中。这是代码:

Main.mxml
<fx:Script>
        <![CDATA[
            import components.CreateCharacters
            [Bindable]
                public var xmlData:XML=<ROOTS></ROOTS>;

            public function sav_clickHandler(event:MouseEvent):void
            {
                    var fr:FileReference = new FileReference(); 

                    var ba:ByteArray = new ByteArray();
                    var newXmlRow:XML=<ROOTS>

                    <TXT>{components.CreateCharacters.mainchar.text}</TXT>// The problem lies with this line
                    <TXTA>{txt2.text}</TXTA>
                    <DTF>{txt3.text}</DTF>
                    </ROOTS>;
                    ba.writeMultiByte(newXmlRow, 'utf-8');
                    fr.save(ba);
                }

            private var openedFile:File;

            private function open_clickHandler(event:MouseEvent):void {
                openedFile = new File();
                openedFile.addEventListener(Event.SELECT, file_select);
                openedFile.browseForOpen("Please select a file...");
            }

            private function file_select(event:Event):void {
                if(openedFile != null && openedFile.exists){
                    var fileStream:FileStream = new FileStream();
                    fileStream.open(openedFile, FileMode.READ);
                    var readXML:XML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable));
                    fileStream.close();
                    trace(readXML.toString());
                    CreateCaracters.maichar.text = readXML.TXT;
                    txt2.text = readXML.TXTA;
                    txt3.text = readXML.DTF;
                }
                trace(event);
            }


        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <net:FileReference id="fileReference" />
    </fx:Declarations>
    <s:Image x="0" y="0" width="100%" height="50" scaleMode="stretch"
             source="assets/imaginationFly.png"/>
    <s:Image x="12" y="1" source="assets/ECWDove.png"/>
    <mx:TabNavigator x="1" y="49" width="100%" height="100%" backgroundColor="#7EB7C5"
                     chromeColor="#85B5BF">
        <s:NavigatorContent width="100%" height="100%" label="Start">
            <s:TextArea id="txt2" x="57" y="29"/>
        </s:NavigatorContent>

        <s:NavigatorContent id="Characters" width="100%" height="100%" label="Characters">
        <components:CreateCharacters id="creatchr" width="100%" height="100%"/>

        </s:NavigatorContent>

        <s:NavigatorContent width="100%" height="100%" label="Worlds">
            <s:TextArea id="txt3" x="55" y="10"
                        text="hello&#xd;I am testing this shit&#xd;hope it works"/>
            <s:Button id="sav" x="285" y="138" label="Save" click="sav_clickHandler(event)"/>
            <s:Button id="open" x="381" y="138" label="Open" click="open"/>

ETC...

CreateCharaters.mxml(组件)

<?xml version="1.0" encoding="utf-8"?>
<s:HGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
          xmlns:s="library://ns.adobe.com/flex/spark"
          xmlns:mx="library://ns.adobe.com/flex/mx"
          chromeColor="#0106BD" paddingLeft="10" paddingRight="0">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>


    <mx:ViewStack id="Characters" x="172" y="10" width="81" height="100%" backgroundColor="#030BB3"
                  chromeColor="#D7D7D8" paddingLeft="5" paddingRight="15">



        <s:NavigatorContent id="Hero" width="100%" height="95%" label="Main Charater">
            <s:HGroup width="100%" height="100%">
                <s:TextArea id="mainchar" bottom="0" width="80%" height="100%"
                            chromeColor="#7070FD">//this is the textarea I want to use
                    <s:text><![CDATA[
                        Name:
                        Surname:
                        Nickname:
                        Hair Color:

ETC...

请提供任何帮助

4

1 回答 1

0

为什么在这种情况下需要绑定?

您的 XML 节点已创建,并且text属性在同一函数内进行评估,因此这应该不是问题。换句话说,当事件处理程序被调用时,当前值text将被复制到您的 XML 节点中,但不会反映任何未来的更改(您可能不需要这样做,因为您在单击“保存”时保存了 XML 文件')。

至于花括号之间的链,{components.CreateCharacters.mainchar.text}似乎不正确,因为components.CreateCharacters它是类引用,而不是直接对组件的引用。相反,您应该使用creatchr;

我不确定 XML 中的变量替换是否支持.. 您是否尝试过将text值保存在这样的局部变量或类变量中?

    var currentText:String = creatchr.mainchar.text;
    <TXT>{currentText}</TXT>
于 2012-09-12T05:02:02.073 回答