Flex中的set啊Flex中的set

Flex中的set啊Flex中的set
2010年10月17日
  Flex中的set function就是给属性赋值的,说起来简单,但是遇到一个相关的bug还真晕。其实几天前就遇到类似问题了,我没有深究,赶进度嘛。今天晚上Alan修一个bug的时候又遇到了,作为小leader,我就得帮他解惑。正好自己也研究下,就算晚上没白等QA做build了。刚刚又上网找了找,还真没类似的文章,那我这个算原创了吧?哇咔咔……和大家分享吧,说不定有谁遇到类似的问题,痛苦半天呢。(已经知道答案的也不要鄙视我,毕竟我也是新手不是?)
  问题:Flex中的set在什么情况下不起作用?
  言归正传,先说说这个问题的由来吧:
  ModelLocator.getInsternce().buildModel.selectedBui ldVo = vo;
  就是代码中的这句话,设了断点怎么也跑不进去(selectedBuildVo是一个set function)在这个set中,有一点逻辑来处理vo中的一些数据的,从而改变绑定在页面上的一个对象。
  不绕弯子了,上面那个问题的答案是:当set中的值在内存中的地址和所要赋值的对象的地址一样时,也就是说,selectBuildVo和vo的地址一样时(同一个对象),这个set不起作用,当然,set中的逻辑也不会跑起来。这个和函数还是不一样的,function的话,什么时候调用,什么时候就会老老实实去跑的……
  同时,让我郁闷的是,第一次遇到这样的情况,原来没一点类似经验啊,根本不会往这个地方想,呵呵。教条主义害死人啊,谁也没和我数过给一个set function赋值的时候一定会跑进去啊。看来以后还是需要多用方法,别什么都省事,想用set function来实现。
  作为一种习惯,我顺带把这个问题和.net中的set对比了一下,发现Flex的set和.net的set还真不一样,哈哈,.net中的set,无论什么时候赋值,都会乖乖响应的……
  ============================
  下面贴出证明上述结论的codes,先.net吧:
  using System;
  using System.Collections.Generic;
  using System.Text;
  namespace ConsoleApplication1
  {
  class TestVo
  {
  public TestVo() { }
  public string test = "TEST";
  }
  class Program
  {
  static TestVo _vo1;
  static TestVo vo1
  {
  get { return _vo1; }
  set { Console.WriteLine("Call SET"); _vo1 = value; }
  }
  static void Main(string[] args)
  {
  TestVo vo2 = new TestVo();
  Console.WriteLine("Try first set, this time the address are NOT same");
  vo1 = vo2;
  vo2.test = "test2";
  Console.WriteLine("Try second set, this time the address are same");
  vo1 = vo2;
  Console.ReadKey();
  }
  }
  }
  下面是Flex的demo:
  TestVo.as文件:
  package
  {
  [Bindable]
  public class TestVo extends Object
  {
  public functionTestVo()
  {
  }
  varpublic var test:String="TEST";
  }
  }
  TrySet.mxml文件:
  
  flex/spark"
  xmlns:mx="library://ns.adobe.com/flex/mx"
  creationComplete="init()">
  
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值