数组设置器不做任何事情

时间:2011-11-01 05:16:29

标签: arrays actionscript-3

每次更新数组中的值时,我都需要更改文本字段,并尝试将代码放入setter中。但是,代码未被调用。即使我这样做

public function set resources(value:*) {
    //this function does not seem to matter at all
}

什么都没发生。我认为AS3会覆盖数组的setter,如何获得除插入changeTextFields()之外的功能;每次我改变数组?

2 个答案:

答案 0 :(得分:2)

我会以相反的顺序解决你的观点:

  1. 没有编程方式知道数组中的值已经改变。作为程序员,当您知道值已更改时,您必须执行一些通知操作(例如,引发事件或调用函数)。在这种情况下,只要值发生变化,就会调用changeTextFields()方法。

  2. 这与setters没有直接关系。即数组设置器或任何其他类型的setter方法没有任何特殊行为。

  3. 所有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项目的一个非常轻量级的包含。