2011-08-12 17 views
10

Mi tarea actual es generar y proporcionar plantillas centralizadas para un DOM en particular; para este ejemplo, digamos que es un formulario.nodejs o envjs - dynamic jquery tmpl

Básicamente me gustaría tomar cada elemento de formulario (desde las etiquetas, a las entradas, a las envolturas div) y guardarlos como individual templates.

A partir de ahí tendremos una interfaz de usuario donde nuestros productores pueden armar estos formularios. Una vez que deciden cómo quieren que se distribuya su formulario (el orden y la estructura DOM son realmente fundamentales para este proyecto. No puede ser una solución exclusiva de CSS), un script en nuestro lado de la plataforma guardará un objeto JSON que determinará el estructura del DOM basada en los nombres de las plantillas que puedo consultar más adelante en la página.

Estoy pensando que una solución ideal aquí sería enviar ese objeto JSON a un servidor de nodos o usar envjs de alguna manera para 'compilar' este dom y luego asignarlo a una variable de PHP para ser incluido en la vista CodeIgniter puede ser indexado por Google.

Sé que JQuery trabaja de forma nativa con envjs y sé que hay un JQuery plugin for node, pero desafortunadamente este es mi primer proyecto JS en el servidor y es bastante importante. Logré que envjs trabajara en mi máquina local a través de la línea de comandos, pero lleva unos buenos 10-30 segundos completar una tarea simple. Si envjs es el camino a seguir, ¿cómo puedo mantenerlo ejecutándose en segundo plano y hacer que las secuencias de comandos lo hagan referencia? ¿Curl de PHP a un servlet de envjs en Tomcat?

Una advertencia es que mi desarrollador local es WAMP (no nos permitirá tener máquinas Unix locales) pero nuestros entornos de prueba y producción son ambos LAMP. Tengo un servidor LAMP personal que puedo probar si esa es la única manera absoluta de ir aquí, pero la codificación de cosas de la compañía en mi servidor personal me puede dar un poco de calor.

Lamentablemente no tengo tiempo para investigar todas las posibilidades y probar/fallar como lo haría normalmente con las nuevas tecnologías en mi propio tiempo. Ideas, guía, ejemplos de código: cualquier cosa que pueda ayudarme a decidir cómo abordar esto sería muy apreciada.

+4

Envjs no tiene ni de lejos el apoyo y la comunidad que tiene el nodo. El nodo no está listo para Windows. La mejor apuesta es ejecutar una máquina virtual de Linux en su pila WAMP y usar un nodo. (luego haga la comunicación TCP entre el nodo & php) – Raynos

+0

Incluso MS ha decidido portar nodejs para windows. Significa que el nodo tiene grandes oportunidades y soporte. Supongo que nodejs será más relativo para ti. Para los motores de plantillas, vean a Jade útil, simple y poderoso. –

+0

Gracias @Pasha, aunque estoy atascado con tmpl ya que ya se usa en todo nuestro framework. – AlienWebguy

Respuesta

9

Respuesta corta: utilice el nodo. Úselo ahora mismo. De hecho, aquí hay un enlace al último Windows nativo .exe que es independiente y no tiene dependencias: http://nodejs.org/dist/v0.5.4/node.exe

Respuesta larga: env.js is/was a cool project. Simula un entorno js en js. Se puede ejecutar en otros entornos y esas cosas. Lo que sea, no importa.

Node.js es un entorno host js que se ejecuta en la parte superior de V8. V8 es el entorno js más rápido que existe, poderes Chrome, etc. El nodo es para el entorno del sistema nativo lo que el js regular es para un navegador: una poderosa combinación de API mezcladas en un brebaje mágico de facilidad de uso para desarrolladores y amplitud de funciones conjunto.

En el navegador se obtiene control sobre el video, el audio, la entrada del usuario, etc. a través de las extensiones DOM a javascript. Con el nodo en el servidor (o solo su propia computadora, tiene MUCHAS aplicaciones más allá del uso regular del servidor) obtiene un soporte increíble para todos los tipos de IO: servidores http/udp y clientes que hacen todo el trabajo repetitivo para usted, archivo I/O, flujos de datos administrados para manejar dicha red y E/S de archivos, acceder a spawn y comunicarse con procesos hijo o fork, y acceso directo al compilador de V8 para compilar y guardar/ejecutar bytecode de javascript.

En lo que respecta al DOM, hay al menos una implementación completa (html) del DOM para el nodo y múltiples parciales. Al menos YUI, jQuery y MooTools que conozco se pueden ejecutar en Nodo trivialmente en la parte superior de una biblioteca DOM para construir DOM desde cualquier fuente que desee como lo haría en el navegador, y luego serializarlo a html o lo que sea.

https://github.com/tmpvar/jsdom es la implementación de DOM que se ejecuta en el nodo (o en cualquier entorno de JavaScript, creo).

https://github.com/tmpvar/jsdom/blob/master/example/browser/browser.js es un ejemplo de la emulación de un navegador:

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); 

Algunas otras librerías que pueden iluminar su camino a una decisión

7

solo unos pocos puntos que vale la pena considerar.

Las diferencias entre Envjs y nodejs son inmensas. Envjs es un entorno de navegador simulado que Rhino implementa por defecto. Es importante tener en cuenta que uno puede (y los desarrolladores tienen) implementar Envjs con Nodejs. Por otro lado nodejs es un entorno Javascript evented para el motor de Google V8, que es muy potente y hay un Lote de módulos disponibles

De lo que usted ha dicho, parece que usted está buscando para construir un teml jQuery en el lado del cliente en función de las interacciones de los usuarios, terminando así algo así.

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

que luego se puede serializar de alguna manera JSON y enviar a un servidor para reproducir (que al parecer ha hecho). Es en el lado del servidor donde busca orientación sobre cómo puede ejecutar la plantilla deserializada.

En este punto en particular recomendaría altamente NodeJS con el módulo nodo-jqtpl que es un puerto del motor de plantillas jQuerys a nodejs que tiene un muy gran número de seguidores https://github.com/kof/node-jqtpl

Además, si usted tiene la capacidad de; Me gustaría mucho ver cómo serializas con seguridad la plantilla en JSON, ya que consideraría que esta es la parte más difícil de todo.

+0

El término "complementos" en combinación con un nodo sugiere que no use un nodo. – Raynos

+3

Lo sentimos "Módulos" entonces (un poco grosero), y ¿por qué Node no está listo para Windows, ya que la documentación explica muy claramente cómo hacerlo? https://github.com/joyent/node/wiki/Installation – martin