从外部AS访问MXML中定义的元素

Che*_*ech 2 apache-flex mxml external textinput

我有一个带有表单的MXML,里面有两个TextInputs.我讨厌在MXML文件中包含任何代码(我来自JavaScript形式)所以我使用了

mx:Script source="external.as"
Run Code Online (Sandbox Code Playgroud)

标记以包含任何MXML文件中使用的任何代码.问题是如果我在external.as文件上有这个代码:

private function populateFromForm():void{
   var vo:ValidObject= new ValidObject();
   vo.market = marketInput.text;
   vo.segment = segmentInput.text;
   vo.priceLow = priceLowInput.text;
   vo.priceHigh = priceHighInput.text;
}
Run Code Online (Sandbox Code Playgroud)

其中marketInput,segmentInput,priceLowInput和priceHighInput是MXML文件中定义的TextInputs.当我尝试complile时,我得到一个1120:访问未定义的属性XXXXX

我尝试在函数之前添加这些行:

public var marketInput:TextInput;
public var segmentInput:TextInput;
public var priceLowInput:TextInput;
public var priceHighInput:TextInput;
Run Code Online (Sandbox Code Playgroud)

但我获得了1151:在命名空间内部定义XXXX存在冲突,这是完全有道理的.

有没有办法做到这一点,而不必将所有输入引用作为参数传递给函数?

Eri*_*air 5

您需要创建对TextInputs父容器的实例的引用,然后使用该引用来获取TextInputs及其属性.我想我们需要对你的文件结构做一些澄清.你是如何创建父容器的实例的?我想这就是你需要做的事情:

MyForm.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:TextInput id="marketInput" />
    <mx:TextInput id="segmentInput" />
    <mx:TextInput id="priceLowInput" />
    <mx:TextInput id="priceHighInput" />
</mx:VBox>
Run Code Online (Sandbox Code Playgroud)

SaveVOContainer.as:

package
{
    public class SaveVoContainer extends Container
    {
        private var myForm:MyForm = new MyForm();

        public function SaveVOContainer
        {
            this.addChild(myForm);
        }

        private function populateFromForm():void{
           var vo:ValidObject= new ValidObject();
           vo.market = myForm.marketInput.text;
           vo.segment = myForm.segmentInput.text;
           vo.priceLow = myForm.priceLowInput.text;
           vo.priceHigh = myForm.priceHighInput.text;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)