2

フォームを含む MXML があり、その中に 2 つの TextInput があります。私は MXML ファイル内にコードを入れるのが嫌いなので (私は JavaScript フォーメーションから来ました)、

mx:Script source="external.as"

タグを使用して、任意の 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;
}

ここで、marketInput、segmentInput、priceLowInput、および priceHighInput は、MXML ファイルで定義された TextInput です。コンパイルしようとすると、1120: Access to undefined property XXXXX が表示されます

関数の前にこの行を追加しようとしました:

public var marketInput:TextInput;
public var segmentInput:TextInput;
public var priceLowInput:TextInput;
public var priceHighInput:TextInput;

しかし、代わりに1151:A conflict exists with definition XXXX in namespace internalを取得します。これは完全に理にかなっています。

すべての入力参照を関数のパラメーターとして渡すことなくこれを行う方法はありますか?

4

5 に答える 5

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>

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;
        }
    }
}
于 2009-02-23T17:26:53.900 に答える
3

Flex で「コード ビハインド」を実行するのは苦痛です。部分クラスの概念や Javascript のようなプロトタイプ継承の柔軟性はありません。多くのリソースの「コード ビハインド フレックス」については Google。

mxml にコードを埋め込むという考えに慣れたほうがよいと思います。スクリプト タグを使用して、インライン コードをできるだけ避けます。MXML 内に大量のコードを記述する必要がある場合は、コードを複数のカスタム コンポーネントにリファクタリングすることをお勧めします。再利用できる場合はボーナス ポイント。

于 2009-02-23T18:03:11.567 に答える
2

Flex でコード ビハインドを行う標準的な方法は、継承によるものです。ドキュメントからの適切な説明は次のとおりです: http://learn.adobe.com/wiki/display/Flex/Code+Behind。手短に:

  1. 基本クラスとして使用する ActionScript クラスを宣言します。
  2. 基本クラスを MXML ファイルのルート コンテナーとして設定します。
  3. MXML ファイルで宣言されたすべてのコントロールについて、まったく同じ名前を使用して、それらを基本クラスのパブリック メンバーとして再宣言する必要があります (ソース タグを持つスクリプト ブロックに対して上記で行っているのとまったく同じですが、それが機能するだけです :-)

したがって、ActionScript ファイルは次のようになります。

package mypackage
{
    import mx.controls.TextInput;

    public class myClass extends WindowedApplication
    {
        public var marketInput:TextInput;

        private function populateFromForm():void{
            /* As above */
        }
    }
}

対応する MXML ファイル:

<?xml version="1.0" encoding="utf-8"?>
<custom:myClass xmlns:custom="mypackage.*"
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx">
    <mx:TextInput id="marketInput"/>
</custom:myClass>

その他の TextInput コントロールについても同様です。これで、 populateFromForm 関数が機能するはずです。

同じエンティティを 2 回再宣言しなければならないのはちょっと凶悪ですが、以前の回答者がそうであったと指摘したほどの苦痛ではありません (Flex 4 でこれが変更され、以前よりも苦痛が軽減された可能性はありますが)。

于 2010-12-22T20:22:16.973 に答える
1
  • これを .AS にインポートします。

    import mx.core.Application;

  • .AS でこれを使用します。

    mx.core.Application.application.component.property = value; mx.core.Application.application.myText.text = 'test';

于 2011-07-27T15:03:38.277 に答える
0

ActionScript ファイルを指すスクリプト タグが mxml ファイルに含まれていますか?


<mx:Script source='includes/foo.as' />

于 2009-02-23T17:22:47.030 に答える