Flex警告数据绑定将无法检测“布局”的分配

时间:2013-05-14 12:47:30

标签: flash flex layout data-binding

我收到了一些代码:

...
<fx:Declarations>
<s:Animate id="toRight"   target="{cp.layout}">
<s:SimpleMotionPath property="horizontalScrollPosition"                                     valueFrom="{cp.layout.horizontalScrollPosition}" valueTo="{cp.layout.horizontalScrollPosition+42}"/>
            </s:Animate>
</fx:Declarations>
....
....
<s:List id="cp" horizontalScrollPolicy="off"  itemRenderer="com.mRenderer" horizontalCenter="1" verticalCenter="1" change="changeEvt(event)" borderAlpha="0"  width="458" height="65"   initialize="initList();"  >

.....

我使用该动画在我的列表中用箭头平滑移动。

但我收到了一些警告:

  

数据绑定无法检测到“布局”的分配。

我知道List中的布局不可绑定。但它不是自定义类。我该如何防止这种情况?

1 个答案:

答案 0 :(得分:1)

所以你使用Animate效果来动画布局对象的horizontalScrollPosition?我认为这是正常的。

您获得的警告由此大括号绑定表达式触发:target="{cp.layout}"。警告告诉您List控件如果layout属性发生更改,则不会调度任何绑定事件。因此,如果您的应用中的某些内容更改了列表的布局,则动画效果将停止工作。

这只是一个警告,只要您不希望更改布局,您的代码应该可以正常工作。

如果您想让警告消失,您有三种选择:

  • 更新您的编译器设置,以便不会生成此警告(错误的想法)
  • 使用返回不可绑定属性的函数调用,而不是使用大括号表达式中不可绑定的属性。
  • 使用“creationComplete”事件处理程序分配动画的target属性

在绑定表达式中使用函数的示例:

<s:Animate target="{getAnimationTarget()}" />

private function getAnimationTarget():Object
{
    return cp.layout;
}

虽然可能会出现同样的问题(如果列表的布局发生更改,列表不会调度任何事件来更新绑定),上述语法应该可以防止生成警告。当花括号表达式包含函数调用时,Flex编译器不会在设计时生成此警告。

使用List的“creationComplete”事件的示例:

<s: List creationComplete="myFunction() />

private myFunction()
{
    toRight.target = cp.layout;
}