1

さまざまなステップに対していくつかの異なる状態を持つインターフェイスを作成しています。これらの手順では、特定のフィールドに入力するためにデータベースから取得するデータがあります。

現在、すべてのデータを取得し、同時にすべてのフィールドに入力するために 1 つの db クエリを実行していますが、「null オブジェクト参照へのアクセス」を提供しています。

テキスト入力の状態が現在の状態ではないときに、actionscript を使用してテキスト入力フィールドにアクセスしようとすると、スコープの問題があるようです。

これを回避する方法はありますか?

例 (これにより、「Null オブジェクト参照」エラーがスローされます):

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
           creationComplete="init()">
<s:states>
<s:State name="State1"/>
<s:State name="state2"/>
</s:states>
<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        protected function init(event:FlexEvent):void
        {
            ti_test.text = "Hello World";
        }

    ]]>
</fx:Script>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:TextInput id="ti_test" includeIn="state2" x="323" y="197"/>
</s:Application>
4

2 に答える 2

3

Flexは、必要な場合にのみ状態を作成します(状態を変更した直後でも、flexは次のレンダリングサイクルで状態が作成されるのを待ってプロセスを最適化するため、使用できません)。これは操作が難しい場合がありますが、状態を変更する前または直後にいくつかのオブジェクトが必要になる場合があります。これらのオブジェクトを使用itemCreationPolicy=immediateすると、フレックス最適化が削除されますが、オブジェクトをすぐに使用できます。

したがって、質問に答えるにはitemCreationPolicy=immediate、テキストフィールドに追加することで、追加の作業なしで問題を解決できるはずです。

于 2011-05-30T08:51:59.183 に答える
0

Flex は現在の状態のみを作成します。したがって、テキスト入力が作成されたときにのみ init() 関数を呼び出すことができます。あなたはこのようにすることができます:

<s:TextInput id="ti_test" includeIn="state2" creationComplete"init()" x="323" y="197"/>

作成前に値を入れたいとおっしゃっていますが、残念ながらそれは不可能です。必要なことは、データベース オブジェクトを表すアクション スクリプト クラスを作成することです。次に、そのクラスのインスタンスに適切な値を割り当てます。そして、あなたはこのように置きます

<s:TextInput id="ti_test" includeIn="state2" text="{dataObject.textValue}" x="323" y="197"/>

本当にクラスを作成したくない場合は、すべての異なる変数をアプリケーションに配置してから、それにデータを割り当てることができます。次に、このようなものがあります

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
           creationComplete="init()">
<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        [Bindable]
        var textValue:String;

        protected function init(event:FlexEvent):void
        {
            textValue = "Hello World";
        }

    ]]>
</fx:Script>
<fx:Declarations>

</fx:Declarations>

<s:states>
<s:State name="State1"/>
<s:State name="state2"/>
</s:states>
<s:TextInput id="ti_test" text="textValue" includeIn="state2" x="323" y="197"/>
</s:Application>
于 2011-05-29T23:56:25.487 に答える