2011-11-01 64 views
2

每次更新数组中的值时,我都需要更改文本字段,并且试图将代码放入setter中。但是,代码没有被调用。即使我这样做阵列setter不会做任何事情

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

什么也没有发生。我认为AS3重写数组的setter,除了插入changeTextFields()之外,我如何获得其他功能。每次我改变阵列?

回答

2

我会以相反的顺序满足您的观点:

  1. 有知道内部数组值发生变化的任何编程方法。作为程序员,当您知道值已更改时,您必须执行一些通知操作(例如,引发事件或调用函数)。在你的情况下,每当数值发生变化时,这就是调用changeTextFields()方法。

  2. 这与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); 
0

为了得到一个事件在修改数组实例时调度,将数组包装在mx.utils.ArrayCollection中。

不要让mx.utils Flex软件包吓到你......通过“合并”链接,这个类的用法不应该增加你的SWF,因为它没有多大用处。

当您想要通知对基本Object实例所做的更改时(例如:将它们用作关联阵列时),会出现类似问题。在这种情况下,要通知更改Object实例,请将实例包装在ObjectProxy中。这是在mx.collections,但也是AS3项目的一个非常轻量级的包含。