Почему изменение длины ArrayCollection не вызывает Setter для компонента, использующего его в качестве источника данных? - PullRequest
0 голосов
/ 15 декабря 2010

У меня есть компонент, в котором я выставляю свойство 'questions' со следующим кодом:

private var _questions:ArrayCollection;
private var questionsChanged:Boolean;

[Bindable("questionsChanged")]
public function get questions():ArrayCollection {
    return _questions;
}

public function set questions(value:ArrayCollection):void {
    if (_questions != value) {
        _questions = value;
        questionsChanged = true;
        invalidateProperties();
        dispatchEvent(new Event("questionsChanged"));
    }
}

В этом компоненте я использую commitProperties () для реализации моей логики.

Iиспользуйте Cairngorm, а 'questions' находится в модели, и, следовательно, он определен как источник для привязки данных.

Когда размер ArrayCollection 'questions' изменяется в другом месте приложения, он не вызывает метод setter вкомпонент, который является местом назначения для привязки данных.

Может ли кто-нибудь помочь мне понять, почему это так?

1 Ответ

3 голосов
/ 15 декабря 2010

Вам нужно будет показать код, где вы меняете коллекцию массивов. Но это вызовет сеттер:

questions = somethingArrayCollection();

Это не будет:

questions.addItem(newQestion)

Переменная вопросов - это, в основном, указатель. Изменение вещи, на которую указывает переменная, не требует установленного события.

Я предлагаю вам взглянуть на CollectionChangeEvent, который ArrayCollection запускает, когда элементы добавляются в и из этого. Прослушайте событие и выполните действия по изменению в обработчике событий. (или привязать к жизненному циклу и сделать недействительным какой-либо флаг и выполнить изменения в commitProperties ())

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