每次更新数组中的值时,我都需要更改文本字段,并尝试将代码放入setter中。但是,代码未被调用。即使我这样做
public function set resources(value:*) {
//this function does not seem to matter at all
}
什么都没发生。我认为AS3会覆盖数组的setter,如何获得除插入changeTextFields()之外的功能;每次我改变数组?
答案 0 :(得分:2)
我会以相反的顺序解决你的观点:
没有编程方式知道数组中的值已经改变。作为程序员,当您知道值已更改时,您必须执行一些通知操作(例如,引发事件或调用函数)。在这种情况下,只要值发生变化,就会调用changeTextFields()
方法。
这与setters
没有直接关系。即数组设置器或任何其他类型的setter
方法没有任何特殊行为。
所有setter都允许你将方法视为可变对象属性(也就是说,使用=
运算符而不是圆括号来调用它们:
public class SetterExample {
private var _resources:* = null;
// Example setter method.
public function set resources(value:*) {
this._resources = value;
}
// Regular method.
public function assignResources(value:*) {
this._resources = value;
}
}
/*===============================
// Later on:
===============================*/
var ex:SetterExample = new SetterExample();
// Here we use the '=' symbol instead of round brackets to invoke the setter.
ex.resources = object1;
// This is not a setter, so we invoke 'assignResources' with the round brackets, passing in our parameters.
ex.assignResources(object1);
答案 1 :(得分:0)
要在修改Array实例时调度事件,请将数组包装在mx.utils.ArrayCollection中。
不要让mx.utils
Flex软件包吓到你......使用“Merged”链接这个类使用不应该对你的SWF增加很多,因为它没有多少。
如果您想要通知对基本Object实例所做的更改(例如:将它们用作关联数组时),则存在类似问题。在这种情况下,要通知对象实例的更改,请将实例包装在ObjectProxy中。这是mx.collections
,但也是AS3项目的一个非常轻量级的包含。