Сущeствует ли JS фреймворк хорошо работающий с html сгенерированным на сервере?
Привет.
В одном из проектов я использую knockout.js для генерации html и датабиндинга.
Проблема в том, что рендеринг на клиенте медленный, а учитывая особенности фреймворка ( поддержка IE6 например ), создание верстки занимает непозволительно много времени.
К сожалению, если делать верстку на сервере, то тут начинают проявляться фатальные недостатки фреймворка.
Поэтому я прошу подсказать, если кто сталкивался с такой проблемой, то как вы её решали?
А что за фатальные недостатки у нокаута при генерации разметки на сервере? Ведь нокаут это как связывающее вещество между моделью, т.е. данными и разметкой, т.е. страницей. Откуда берутся эти обе компоненты ему все равно, его задача просто их связать.
Допустим нужно отобразить товары интернет магазина. Если мы используем knockout.js, то логично было бы использовать foreach и пройтись по всему массиву, создавая верстку для каждого элемента. Проблема в том, что создание html на клиенте это медленно, а в контексте knockout, это очень медленно. Потому что foreach из коробки втавляет элементы в DOM по одному. Но если не использовать foreach, а получать верстку от сервера, то какая связывать модели и вид ( html ) ?
doska666: Теперь понятно, вся проблема в том что при таком подходе нет отдельной view model, есть разметка в которой уже сидит наша модель. Т.е. мы нарушили концепцию mvvm в которой view model ничего не знает о model. Думаю, что данный вопрос будет наблюдаться у всех аналогичных mvvm фреймворков. Такая задача у меня тоже возникала - например когда я генерирую страницу есть соблазн отрендерить ее полностью сразу, но нет, не получается, поэтому сначала отдаем пустую страницу, потом аяксом подтягиваем данные и только потом ее рисуем уже как должно быть на клиенте.
Фактически вам надо чтобы при изменении html, автоматически модель приводилась в соответствие с этой разметкой, тогда вы смогли бы ajax-ом грузить готовую разметку, вставлять ее в dom, а фреймворк обновлял модель. Но нокаут такого не может, а тут stackoverflow.com/questions/16322016/knockout-2-wa... предлагают самому отслеживать изменения в dom, т.е. делать это ручками. Здесь - stackoverflow.com/a/9252529 так и говорят, что не надо руками изменять dom - изменяйте модель.