Рекомендуемый шаблон для наблюдения за изменениями структуры дерева [дубликат]

Я всегда использую:

p^=True

Если p является логическим, оно переключается между истинным и ложным.

0
задан DrummerB 12 May 2012 в 12:09
поделиться

2 ответа

Это один из способов. Другим способом было бы, чтобы модель отправляла уведомления, когда она менялась, и наблюдал их контроллер.

Кроме того, модель обычно не изменяется спонтанно. Обычно изменение инициируется за пределами модели в ответ на какое-либо событие. Обычно это делает контроллер. Таким образом, этот контроллер также может спровоцировать обновление в виде схемы. (Может быть несколько контроллеров, поэтому, возможно, контроллер, который инициирует изменение модели, просто информирует контроллер окна или представления, который будет отвечать за обновление плана.)

1
ответ дан Ken Thomases 24 August 2018 в 02:55
поделиться

Я задал аналогичный вопрос, который был отмечен как дубликат здесь: Рекомендуемый шаблон для наблюдения изменений структуры дерева [duplicate]

Я хотел избежать использования NSTreeController, поскольку это означает, что вы потерять управление анимацией при появлении обновлений.

У меня установлен MVVM. Моя модель представляет собой график, моя модель представления - это дерево. Между любыми узлами дерева и узлом графа существует одно отношение. Как подробно описано выше, между узлами дерева и контурным представлением очевидно много отношений.

Итак, я установил ...

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

Для обновления внешнего вида я остановился на делегате модели представления, который Я реализую на контроллере view. Каждый древовидный узел в модели представления может вызвать методы делегирования в корне дерева при добавлении или удалении дочерних элементов. Это чувствовало самый ясный подход ко мне и легко отлаживаемое. Я не хотел, чтобы цепочки происходили за кулисами.

Окончательный вызов обновления на основе внешнего вида чувствовал себя достаточно простым:

func itemsInserted(atIndexes indexes: IndexSet, forParent parent: ECViewModelNode) {
        outlineView?.insertItems(at: indexes, inParent: parent, withAnimation: .slideDown)
    }

На уровне ячеек таблицы я связываю непосредственно к деталям узлов модели графа.

0
ответ дан Giles 24 August 2018 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: