nodejs или envjs - динамический jquery tmpl

Моя текущая задача состоит в том, чтобы генерировать и предоставлять централизованные шаблоны для конкретной модели DOM - для этого примера давайте просто скажем, что это форма.

По сути, я хотел бы взять каждый элемент формы (от меток до входных данных, оберток div) и сохранить их как отдельные шаблоны.

Оттуда у нас будет пользовательский интерфейс, где наши производители могут собрать воедино эти формы. Как только они решат, как они хотят, чтобы их форма была выложена (порядок и структура DOM действительно важны для этого проекта. Это не может быть решением только для CSS), скрипт на нашей платформе сохранит объект JSON, который определит структура DOM, основанная на именах шаблонов, на которые я могу ссылаться при загрузке страницы позже.

Я думаю, что идеальным решением здесь было бы отправить этот объект JSON на сервер узла или как-нибудь использовать envjs для "сборки" этого dom, а затем назначить его переменной PHP для включения в представление CodeIgniter, чтобы его можно было проиндексировать от Google.

Я знаю, что JQuery изначально работает с envjs, и я знаю, что есть плагин JQuery для узла, но, увы, это мой первый JS-проект на стороне сервера, и он оказывается довольно крупным. Мне удалось заставить envjs работать на моем локальном компьютере через командную строку, но на выполнение простой задачи уходит добрых 10-30 секунд. Если envjs - это путь, как я могу сохранить его в фоновом режиме и сделать так, чтобы скрипты ссылались на него? PHP curl к сервлету envjs на Tomcat, может быть?

Одним из предостережений является то, что мой локальный разработчик - WAMP (из-за того, что у нас нет локальных машин Unix), но наша тестовая и производственная среды - это LAMP. У меня есть личный сервер LAMP, на котором я могу проверить, является ли это единственно возможным способом, но кодирование компании на моем личном сервере может привести меня в замешательство.

К сожалению, у меня нет времени, чтобы исследовать все возможности и попробовать / потерпеть неудачу, как я обычно делаю с новыми технологиями в свое свободное время. Идеи, руководство, примеры кода - все, что может помочь мне решить, как подойти к этому, будет с благодарностью.

2 ответа

Решение

Краткий ответ: используйте узел. Используйте это прямо сейчас. Фактически, вот ссылка на последнюю версию Windows .exe, которая является автономной и не имеет зависимостей: http://nodejs.org/dist/v0.5.4/node.exe

Длинный ответ: env.js - это был классный проект. Он имитирует среду js в js. Он может работать в других средах и прочее. Как бы то ни было, это не имеет значения.

Node.js - это хост-среда js, работающая поверх V8. V8 - самая быстрая из существующих js-сред, поддерживающая Chrome и т. Д. Сам нод для родной системной среды - то же, что и обычная js для браузера: мощная комбинация API-интерфейсов, смешанных воедино, обеспечивает простоту использования для разработчиков и широкий набор функций. задавать.

В браузере вы получаете контроль над видео, аудио, пользовательским вводом и т. Д. Через расширения DOM для javascript. С узлом на сервере (или только на вашем собственном компьютере, он имеет множество приложений, выходящих за рамки обычного использования сервера), вы получаете невероятную поддержку для всех типов ввода-вывода: http / udp-серверы и клиенты, которые выполняют всю работу за вас, файл I/O, управляемые потоки данных для обработки упомянутых сетевых и файловых операций ввода-вывода, доступ к spawn и связи с дочерними или ветвящимися процессами, а также прямой доступ к компилятору V8 для компиляции и сохранения / запуска байт-кода javascript.

Что касается DOM, существует как минимум одна полная (html) реализация DOM для узла и несколько частичных. По крайней мере, YUI, jQuery и MooTools, о которых я знаю, могут тривиально запускаться в Node поверх библиотеки DOM, чтобы создавать DOM из любого источника, который вы хотели бы видеть в браузере, а затем сериализовать его в html или что-то еще.

https://github.com/tmpvar/jsdom - это реализация DOM, работающая в узле (или в любой среде javascript, которую я считаю).

https://github.com/tmpvar/jsdom/blob/master/example/browser/browser.js является примером эмуляции браузера:

var sys = require('sys');
var dom = require('../../lib/jsdom/level2/html').dom.level2.html;
var browser = require('../../lib/jsdom/browser/index').windowAugmentation(dom);

var document = browser.document;
var window = browser.window;

var el = document.createElement('div');
el.id = 'foo';
el.innerHTML = '<em>This is a test</em> This <strong class="odd">is another</strong> test ';
document.body.appendChild(el);

sys.puts(document.outerHTML);

Некоторые другие библиотеки, которые могут пролить свет на ваш путь к решению

Только несколько моментов, которые стоит рассмотреть.

Различия между Envjs и Nodejs огромны. Envjs - это симулированная браузерная среда, которая по умолчанию реализована Rhino. Важно отметить, что можно (и разработчики имеют) реализовать Envjs с Nodejs. С другой стороны, Nodejs - это четвёртая среда Javascript для движка Googles V8, очень мощная, и доступно множество модулей.

Из того, что вы сказали, похоже, что вы хотите создать jQuery teml на стороне клиента, основываясь на взаимодействиях пользователей, что в итоге выглядит примерно так.

<script id="dynamicTemplate" type="text/x-jquery-tmpl">
    {{tmpl "smallTemplate1"}}
    <tr><td>key: ${value}</td></tr>
</script>

Который вы можете затем сериализовать некоторым JSON- способом и отправить на сервер для воспроизведения (что вы, очевидно, сделали). Именно на стороне сервера вы ищете руководство по выполнению десериализованного шаблона.

В этом конкретном пункте я настоятельно рекомендую NodeJS с модулем node-jqtpl, который является портом механизма шаблонов jQuerys для nodejs, который имеет довольно большой следующий https://github.com/kof/node-jqtpl

Также, если у вас есть возможность; Мне бы очень хотелось увидеть, как вы безопасно сериализуете шаблон в JSON, так как считаю это самой сложной частью всего этого.

Другие вопросы по тегам