Flex 绑定变量没有效果

Posted

技术标签:

【中文标题】Flex 绑定变量没有效果【英文标题】:Flex bind variable has no effect 【发布时间】:2016-01-05 02:34:57 【问题描述】:

无论我做什么,在初始化期间我都无法对 Flex MXML 元素产生任何影响。 我想根据 flashVar 是否为真显示不同的徽标。

由于某种原因,flashvar 对元素的显示方式没有影响。

我错过了什么吗?

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark"
     xmlns:components="ru.kutu.grindplayer.views.components.*"
     mouseEnabled="false"
     implements="ru.kutu.grind.views.api.IMainView"
     preinitialize="preinitialize(event)"
     >

<s:states>
    <s:State name="initializing" />
    <s:State name="ready" />
    <s:State name="error" />
</s:states>

<s:BorderContainer 
    id="logoContainer"
    left="0" right="0"
    top="0" bottom="0"
    mouseEnabled="false"
    includeIn="initializing"
    backgroundColor="0x070707"
    borderVisible = "false"
>
    <s:Image  
        id="logoPaid"
        verticalCenter="0"
        horizontalCenter="0"
        source="@Embed('/../assets/skin/dark.png')"
        visible="is_paid"
    />
    <s:Image  
        id="logoFree"
        verticalCenter="0"
        horizontalCenter="0"
        source="@Embed('/../assets/skin/dark_free.png')"
        visible="!is_paid"
    />
</s:BorderContainer> 

<components:PlayerView
    id="playerView"
    left="0" right="0"
    top="0" bottom="0"
    visible="false"
    visible.ready="true"
    />

<s:Label
    id="errorDisplay"
    
    mouseEnabled="false"
    verticalCenter="0"
    horizontalCenter="0"
    includeIn="error"
    itemCreationPolicy="immediate"
    />


<s:transitions>
    <s:Transition
        fromState="*" toState="*"
        autoReverse="true"
        interruptionBehavior="stop"
        >
        <s:Fade 
            target="this"
            duration="300"
          />
    </s:Transition>
</s:transitions>


<fx:Script>
    <![CDATA[
        import mx.core.FlexGlobals;
        import mx.events.FlexEvent;

        [Bindable]
        private var is_paid:Boolean; 

        public function set errorText(value:String):void 
            errorDisplay.text = value;
        

        public function initializing(is_paid:Boolean):void 
            currentState = "initializing";
        

        public function ready():void 
            currentState = "ready";
        

        public function error():void 
            currentState = "error";
        

        private function preinitialize(event:FlexEvent):void 
            is_paid = FlexGlobals.topLevelApplication.parameters.is_paid;
        
    ]]>
</fx:Script>

【问题讨论】:

如果您将preinitialize() 更改为简单地设置is_paid = true;,您会看到什么? is_paid = true 或 is_paid = false 似乎确实生效了.. 好消息!还有什么可以打破的?我仔细检查了一下,对象得到了正确的 flashvar ( is_paid=true/is_paid=false ) 您是否尝试将宽度和高度设置为 logoContainer?也许“初始化”很快,所以你看不到它?尝试跟踪状态之间的时间。 我指的是includeIn="initializing" 初始化状态持续大约 4 秒 .. 它需要加载 OSMF 和其他几个大库.. 似乎它确实应用了正确的样式并在我硬设置值时显示它 【参考方案1】:

我认为您将字符串解析为布尔值。因为参数名称和值是字符串,试试这个:

is_paid = FlexGlobals.topLevelApplication.parameters.is_paid == 'true';

【讨论】:

天哪,是的!就是这样!我想太多的 phpjavascript 让我忘记了普通语言不要认为“假”是假的......谢谢!

以上是关于Flex 绑定变量没有效果的主要内容,如果未能解决你的问题,请参考以下文章

OBIEE 和绑定变量

angular 双向数据绑定number类型的变量怎么让它没有默认值

在 R 中,是不是可以禁止“注意:全局变量没有可见绑定”?

Flex- Singleton 的属性绑定到 HttpService 属性没有被更新

在 R DBI 中绑定变量

R CMD检查中的全局变量注释没有可见的绑定