在Flex(Flash Builder 4)中,我需要一种方法来了解数组集合中的某些内容是否已更改。
我有一个自定义对象:
[绑定] public var _myobject:MyObject;
它基本上只是一个包含许多不同String和Number属性的类。
我需要一种可靠的方法来了解是否有任何属性已被更改。例如,我将属性绑定到用户界面(字段),但也可以通过代码更改某些属性。
有办法做到这一点吗?我找到了ChangeWatcher,但看起来它只查看一个简单的属性,例如String或Number。我需要观察或检测对象中所有属性的更改,希望无需将ChangeWatcher事件添加到每个属性。这可能吗?
答案 0 :(得分:1)
您可能最好只在您想要绑定的特定属性上调度绑定事件。更好的是,调度一个自定义绑定事件,以便所有绑定的东西不必过滤“这是我关心的属性吗?”使用Flash Builder 4.5非常简单,只需选择变量名并按Ctrl-1,选择“创建getter和setter”,选择getter和setter,然后选中“Bindable”和“创建自定义事件”。
这将为您创建如下所示的代码:
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'));
}
}
这比Flash Builder在您自己使用Bindable标记时为您生成的代码更简洁,更高效。
答案 1 :(得分: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();
}
}
答案 2 :(得分: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));
}
}
也许这门课会给你一些新的想法