Как эффективно реализовать клиентские шаблоны JavaScript? - PullRequest
2 голосов
/ 07 мая 2011

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

Вот несколько методов, о которых я подумал:

1, Я мог бы написать вспомогательную функцию javascript, которая загружает партиалы через ajax в некоторую форму локального хранилища, и все последующие шаблоны, которым требуется этот конкретный фрагмент, сначала будут заглядывать в локальное хранилище. Я думаю, что этот метод не очень безопасен, потому что локальное хранилище не всегда гарантировано. И если я не смогу сохранить их в локальном хранилище, партиалы вызовут слишком много вызовов ajax.

2, я мог бы поместить их все в теги скрипта внутри моего основного html-файла. Это будет работать достаточно хорошо, особенно с head.js (чтобы включить параллельную загрузку тегов скрипта), но все же - я думаю, что каждый тег скрипта - это отдельный вызов сервера, верно? Это не совсем улучшает ситуацию.

3, я мог бы поместить все шаблоны в один тег сценария (или, я полагаю, html) и вручную отфильтровать через какой-то разделитель ... например: "# template1 (строка blabla template1) # template2 (строка blablabla template2) и положить эти строки в глобалы. Это приведет к единственному обращению к серверу, а все остальное будет сделано на клиенте.

Предложения? Я посмотрел на существующие движки шаблонов, но не могу точно определить, как они это делают. Код довольно сложный

1 Ответ

1 голос
/ 07 мая 2011

Подход, который я выбрал для спецификации вызовов шаблонов и загрузки по требованию для спецификации / перезаписи шаблонов jQuery, заключается в его конвейерной обработке.

См. Раздел 9 (ранней) черновой спецификации и см. тесты комплекта соответствия внизу для примера пользовательской загрузки шаблона по требованию (Testcase "Основные вызовы и загружен как раз вовремя! "является соответствующим).

Основная суть в том, что загрузчики плагинов (написанные на JS) могут подключаться между анализом и компиляцией для проверки дерева разбора. Проход плагина получает имена шаблонов сопоставления объектов для разбора деревьев. Если они видят какие-либо частичные селекторы шаблонов (для использования вашего языка), они могут попытаться загрузить любые неразрешенные шаблоны с помощью вызовов AJAX или файлового ввода-вывода в Node.js и добавить партиалы к объекту ввода, чтобы компилятор компилировал просто загруженные партиалы вместе с общедоступными шаблонами.

В отношении эффективности см. отметки . Я нахожусь в процессе переноса кода на github: https://github.com/mikesamuel/jquery-jquery-tmpl-proposal на случай, если вы захотите сотрудничать.

...