9RIA.com天地会 - 论坛

返回列表 发帖

天地培训

9RIA天地会官方培训机构

Adobe官方认证培训中心

[疑难] flex动态添加组件 自定义属性绑定问题:

主程序代码
  1. <mx:Application xmlns:mx="  http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()" xmlns:bb="*">
  2. <mx:Script>
  3. <![CDATA[
  4. [Bindable]
  5. public var tmp:String = "woainissss";
  6. private function init():void{
  7.   var sc:abc =new abc();
  8.   //sc.stag = tmp;
  9.   this.addChild(sc);
  10. }

  11. private function cheang():void{
  12.   tmp = "sadfasdf";
  13.   trace(tmp);
  14. }
  15. ]]>
  16. </mx:Script>
  17. <mx:Button x="163" y="87" label="Button" click="cheang();"/>
  18. <bb:abc id="asdfasd" stag="{tmp}"  x="67" y="55"/>
  19. </mx:Application>
复制代码
abc组件代码
  1. <mx:Canvas xmlns:mx="  http://www.adobe.com/2006/mxml" width="400" height="300">
  2. <mx:Script>
  3. <![CDATA[
  4. [Bindable]
  5. public var stag:String = "woaini";
  6. ]]>
  7. </mx:Script>
  8. <mx:Label x="182" y="112" text="{stag}"/>
  9. </mx:Canvas>
复制代码
点击button,修改abc的Label标签,使用标签加载的abc的组件可以更改,但是动态new添加的abc的Label标签数据不变呢?

天地人才库
给new添加的abc附一个id,id.stag=tmp

TOP

分享学习中...
自己定义的添加组件  我还没写过呢

TOP

好兄弟,讲义气!---by eko

踏上天地会荣耀之路!

 

申请舵主

加入掘金队

加入译林军

知识专题整理

 

咨询(QQ):

1442604479(小地)

 

首先,绑定是本质其实是通过事件通知实现的,但你使用标签代码 stag="{tmp}" 时,用大括号说明了变量绑定,编译器会在后台帮你生成代码实现绑定效果;但你的非标签代码中sc.stag = tmp,并没有实现绑定机制(没有大括号的,只是简单赋值而已),光一个[Bindable]只标明该变量是可绑定的,还需要{}来配合才形成完整的绑定;从本质上说,[Bindable]标明的变量改变时,该变量会dispatch一个属性改变事件,而stag="{tmp}"中,用了大括号则表示属性改变事件被监听到时,stag的值重新赋值,且update组件。再往下深入的话就设计ui组件的刷新机制了.
      总之,你的as代码中其实是没有实现绑定的,另外通常情况下,as 代码中是不需要用绑定机制的,标签代码中才用

TOP

本帖最后由 0758jian 于 2010-2-10 00:25 编辑

楼上所言差矣!
其实AS中可以这样去做:
导入:import mx.binding.utils.BindingUtils;
然后在你的init()里加入这么一句:
BindingUtils.bindProperty(sc, "stag", this, "tmp");

完美解决由AS动态生成的组件的数据绑定!
阿健博客:www.flexrain.cn
Flex AS3 PHP群:4790006

TOP

楼上是完美的解决方案,加分100

TOP

返回列表