Цитата:
Сообщение от __etc
1) Это каким образом изменение модели прошло в обход контроллера? Контроллер, если и слушает изменение модели, то только лишь те изменения, которые требуют добавления/удаления вьюверов. В противном случае, изменения отслеживаются исключительно вьюверами. Ну а если подходить к возможным замкнутым рекурсиям, то в любом случае (в любом, это важно), в сеттере должна стоять проверка на текущее значение, типа if (this._somevalue === value) return;.
|
Я про случай делегирования, когда во вьювере нет функции апдейта:

Код AS3:
//контроллер
ns = new NumericStepper();
ns.addEventListener(Event.CHANGE, updateModel);
model.addEventListener(Event.CHANGE, updateViewers);
function updateViewers():void{
ns.value = model.value;
}
function updateModel():void{
model.value = ns.value;
}
Так значит ситуация, когда сеттер вызывается вхолостую из-за того, что вьювер сам себя уже проапдейтил (тот же NumericStepper), возможна (см. код выше)?
Или все же надо сделать класс, наследующийся от NumericStepper, и убирающий этот "самоапдейт" из него?
Логика подсказывает, что проще вызвать сеттер вхолостую (с проверкой который), чем все делать идеально "правильно" переписав кучу стандартных компонент под "идеологию MVC".