yandex-ui / noscript

Noscript: JavaScript MVC Framework for building SPA
http://yandex-ui.github.io/noscript/
MIT License
34 stars 22 forks source link

[ns.View] Через patchLayout нельзя менять детей #533

Closed doochik closed 9 years ago

doochik commented 9 years ago

Простая ситуация

ns.View.define('view', {
    methods: {
        patchLayout: function() {
            if (this.goodMoonPhase) {
                return 'view1';
            }

            return null;
        }
    }
});

В плохую фазу луны вид не имеет детей. Потом настает хорошая фаза и вид получает ребенка. Вид валиден, поэтому рендерится только ребенок. И вот тут возникает главная проблема - ребенок (view1) и родитель (view) не знают куда вставить его ноду. Если родитель имеет собственную разметку, то проблема становится еще хуже.

Делать parent.appendChild плохо, т.к. дает странное, неявное и неконтроллиуремое поведение.

Кажется, что правильный вариант - разработчик должен вставить туда бокс. Бокс не имеет разметки и как раз предназначен для решения таких случаев. Вообще-то patchLayout как раз создавался как реализация бокса, которая зависит от моделей и состояния конкретного вида.

Еще это означает, что patchLayout должен всегда что-то вернуть, а это значит, что #527 решается сама собой.

Katochimoto commented 9 years ago

да, согласен, всегда что-то возвращать самое правильное