Я пишу scala-js frontend framework, ключевой особенностью которого является рендеринг на стороне сервера. Идея заключалась в том, что есть компоненты, которые управляют dom с document.createElement
, element.appendChild
и другими. На сервере я бы включил подкласс HTMLDocument
, Element
и другие, переопределив их методы с реализацией сервера dom, которые могут быть преобразованы в простой HTML-код. Поэтому я добавил scalajs-dom_sjs
зависимости от серверного модуля и попытался это сделать. Но HTMLDocument
, Element
и, скорее всего, другие классы имеют вызовы js.native
внутри своих конструкторов, которые генерируют исключения, говорящие «используйте JVM-версию библиотеки». Который не существует, очевидно. Я мог бы использовать другой способ и реализовать свою собственную библиотеку dom, но это в два раза больше работы, поэтому я должен был бы реализовать ее на сервере и клиенте, используя первый подход, который я бы реализовал только один раз на сервере.Написание фреймворка scala-js с рендерингом на стороне сервера. Невозможно использовать scala-js-dom на сервере
Так что мой вопрос: почему это запрещено использовать версии библиотеки scala-js на сервере так строго и есть ли работа вокруг него?
Откуда возникнет реализация методов? Я бы написал их. Для моей цели (рендеринга на стороне сервера) мне не нужно реализовывать ajax и другие специфические для браузера вещи, только основные манипуляции с dom. – Yaroslav
Тогда я верю, что вы хотите, что я объясняю во втором абзаце, с оговорками третьего абзаца. – sjrd
Scalatags полностью позволяет вам повторно использовать шаблоны для внутренних и текстовых бэкэндов http://www.lihaoyi.com/scalatags/#Cross-backendCode –