nodejs или envjs - динамический jquery tmpl - PullRequest
10 голосов
/ 13 августа 2011

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

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

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

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

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

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

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

Ответы [ 2 ]

9 голосов
/ 19 августа 2011

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

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

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

В браузере вы получаете контроль над видео, аудио, пользовательским вводом и т. д. через расширения 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);

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

7 голосов
/ 15 августа 2011

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

Различия между 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, поскольку я считаю, что это самая сложная часть всего этого.

...