Массив сеттеров ничего не делает - PullRequest
2 голосов
/ 01 ноября 2011

Мне нужно менять текстовое поле каждый раз, когда значения в массиве обновляются, и я попытался поместить код в установщик.Однако код не вызывается.Даже если я сделаю это

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

Ничего не произойдет.Я думаю, что AS3 переопределяет сеттеры для массивов, как мне получить функциональность, отличную от вставки changeTextFields ();каждый раз, когда я меняю массив?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Я буду обращаться к вашим точкам в обратном порядке:

  1. Нет никакого программного способа узнать, что значения внутри массива изменились. Как программист, вы должны выполнить какое-то уведомляющее действие (например, вызвать событие или вызвать функцию), когда вы знаете, что значения изменились. В вашем случае это вызывает метод changeTextFields() всякий раз, когда значения изменились ..

  2. Это не имеет прямого отношения к setters. то есть не существует какого-либо специального поведения для установщиков массива или любого другого типа 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);
0 голосов
/ 05 сентября 2012

Чтобы получить событие, отправленное при изменении экземпляра Array, оберните массив в mx.utils.ArrayCollection .

Не позволяйте пакету mx.utils Flex напугать вас ... с помощью связи "Объединено", использование этого класса не должно добавить много к вашему SWF, так как его немного.

Подобная проблема существует, когда вы хотите получать уведомления об изменениях, внесенных в базовые Объект экземпляры (например, при использовании их в качестве связанного массива). В этом случае для уведомления об изменениях в экземплярах объектов вы оборачиваете экземпляр в ObjectProxy . Это в mx.collections, но также довольно легкое включение для проектов AS3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...