每次更新数组中的值时,我都需要更改文本字段,并且试图将代码放入setter中。但是,代码没有被调用。即使我这样做阵列setter不会做任何事情
public function set resources(value:*) {
//this function does not seem to matter at all
}
什么也没有发生。我认为AS3重写数组的setter,除了插入changeTextFields()之外,我如何获得其他功能。每次我改变阵列?
每次更新数组中的值时,我都需要更改文本字段,并且试图将代码放入setter中。但是,代码没有被调用。即使我这样做阵列setter不会做任何事情
public function set resources(value:*) {
//this function does not seem to matter at all
}
什么也没有发生。我认为AS3重写数组的setter,除了插入changeTextFields()之外,我如何获得其他功能。每次我改变阵列?
我会以相反的顺序满足您的观点:
有知道内部数组值发生变化的任何编程方法。作为程序员,当您知道值已更改时,您必须执行一些通知操作(例如,引发事件或调用函数)。在你的情况下,每当数值发生变化时,这就是调用changeTextFields()
方法。
这与setters
没有直接关系。即对阵列设定器或任何其他类型的方法没有任何特殊的行为。
所有制定者要做的就是让你把一个方法作为可变对象属性(也就是你用=
运营商,而不是圆括号中调用它们):
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);
为了得到一个事件在修改数组实例时调度,将数组包装在mx.utils.ArrayCollection中。
不要让mx.utils
Flex软件包吓到你......通过“合并”链接,这个类的用法不应该增加你的SWF,因为它没有多大用处。
当您想要通知对基本Object实例所做的更改时(例如:将它们用作关联阵列时),会出现类似问题。在这种情况下,要通知更改Object实例,请将实例包装在ObjectProxy中。这是在mx.collections
,但也是AS3项目的一个非常轻量级的包含。