1

我正在为不同的步骤创建一个具有几种不同状态的界面。对于这些步骤,我从数据库中提取了一些数据来填充某些字段。

截至目前,我正在执行一个数据库查询以获取所有数据并希望同时填写所有字段,但它让我“访问空对象引用”。

当文本输入所处的状态不是当前状态时,当您尝试使用操作脚本访问文本输入字段时,似乎存在范围问题。

有没有办法解决?

例如(这将引发“空对象引用”错误):

<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会删除 flex 优化,但允许您立即使用该对象。

因此,要回答您的问题,添加itemCreationPolicy=immediate到您的文本字段应该可以解决您的问题,而无需任何额外的工作。

于 2011-05-30T08:51:59.183 回答
0

Flex 只会使当前状态。因此,您只能在创建 textinput 时调用 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 回答