0

在 Flex (Flash Builder 4) 中,我需要一种方法来了解数组集合中的某些内容是否已更改。

我有一个自定义对象:

[可绑定] public var _myobject:MyObject;

它基本上只是一个包含一堆不同 String 和 Number 属性的类。

我需要一种可靠的方法来了解是否有任何属性已更改。例如,我将属性绑定到用户界面(字段),但也可以通过代码更改某些属性。

有没有办法做到这一点?我找到了 ChangeWatcher,但看起来它只查看一个简单的属性,例如字符串或数字。我需要观察或检测对象中所有属性的变化,希望不必将 ChangeWatcher 事件添加到每个属性。这可能吗?

4

3 回答 3

1

您最好只在您希望可绑定的特定属性上调度绑定事件。更好的是,调度一个自定义绑定事件,这样所有绑定的东西都不必过滤“这是我关心的属性吗?” 使用 Flash Builder 4.5 很容易做到这一点,只需选择变量名称并按 Ctrl-1,选择“创建 getter 和 setter”,选择 getter 和 setter 并选中“可绑定”和“创建自定义事件”。

这将为您创建如下所示的代码:

private var _yourProperty:String;

[Bindable (event='yourPropertyChange')]
public function get yourProperty():String {
   return _yourProperty;
}

public function set yourProperty(value:String):void {
   if (value !=== _yourProperty) {
     _yourProperty = value;
     dispatchEvent(new Event('yourPropertyChange'));
   }
}

当您仅使用 Bindable 标记时,这将比 Flash Builder 在幕后为您生成的代码更简洁、更高效。

于 2012-05-09T00:39:53.060 回答
0

如果您将定义的类用作 VO/DAO 并将 [Bindable] 标记应用于该类,这将为您绑定所有属性(只要它们是读/写的)。

匿名对象检测充其量是困难的,更不用说增加失去编译器类型检查的额外麻烦了。

超级基本的例子: - 关键是将它绑定到调度程序,因此它可以在内部发送PropertyChangeEvent。

 [Bindable]
 public class Actor extends EventDispatcher 
 {
      public var fName:String;
      public var lName:String;
      public var age:uint;

      public function get displayName():String
      {
          return lName +', '+ fName;
      }

      public function Actor()
      {
          super();
      }
 }
于 2012-05-08T20:31:52.023 回答
0
public class BindableDictionary extends EventDispatcher {
        public function BindableDictionary() {
            super();
        }

        public var dictionary:Dictionary = new Dictionary();

        [Bindable("change")]
        public function get(key:Object):Object {
            return dictionary[key];
        }

        public function put(key:Object, value:Object):void {
            dictionary[key] = value;
            dispatchEvent(new Event(Event.CHANGE));
        }
    }

也许这门课会给你一些新的想法

于 2012-05-09T08:19:01.503 回答