2011-08-12 6 views
10

Moje bieżące zadanie polega na generowaniu i dostarczaniu scentralizowanych szablonów dla konkretnego DOM - dla tego przykładu powiedzmy, że jest to formularz.nodejs lub envjs - dynamic jquery tmpl

Zasadniczo chciałbym wziąć każdy element formularza (od etykiet, do wejść, do owijarki div) i zapisać je jako indywidualne templates.

Stamtąd będziemy mieli interfejs użytkownika, w którym nasi producenci mogą łączyć te formularze. Kiedy już zdecydują, w jaki sposób chcą, aby ich forma została ułożona (kolejność i struktura DOM jest rzeczywiście krytyczna dla tego projektu.Nie może to być rozwiązanie tylko CSS), skrypt na naszej platformie zapisze obiekt JSON, który określi strukturę DOM opartą na nazwach szablonów, do których mogę się odwołać na stronie wczytanej później.

Myślę, że idealnym rozwiązaniem byłoby wysłanie tego obiektu JSON do serwera węzła lub użycie envjs w jakiś sposób do "zbudowania" tej domeny, a następnie przypisanie jej do zmiennej PHP, która ma być zawarta w widoku CodeIgniter, tak aby może być indeksowany przez Google.

Wiem, że JQuery działa natywnie z envjs i wiem, że jest JQuery plugin for node, ale niestety, jest to mój pierwszy projekt JS po stronie serwera i zdarza się, że jest całkiem poważny. Byłem w stanie przekonwertować envjsa na moją maszynę lokalną za pośrednictwem wiersza poleceń, ale wykonanie prostego zadania zajmuje dobre 10-30 sekund. Jeśli envjs jest drogą do zrobienia, jak mogę go utrzymywać w tle i czy odnośniki do niego odnoszą się? PHP curl do serwletu envjs na Tomcata może?

Jednym z moich ograniczeń jest moje lokalne narzędzie WAMP (nie pozwala nam na lokalne maszyny uniksowe), ale nasze środowiska testowe i produkcyjne to LAMPA. Mam osobisty serwer LAMP, który mogę przetestować, jeśli jest to absolutny sposób, aby przejść tutaj, ale rzeczy firmy kodującej na moim osobistym serwerze mogą mnie wciągnąć.

Niestety nie mam czasu, aby zbadać wszystkie możliwości i spróbować/nie, jak zwykle, z nowymi technologiami w moim własnym czasie. Pomysły, wskazówki, przykłady kodu - cokolwiek, co pomoże mi zdecydować, jak podejść do tego, będzie bardzo mile widziane.

+4

Envjs nie ma nigdzie w pobliżu wsparcia i społeczności, że węzeł ma. Węzeł nie jest gotowy na okna. Najlepszym rozwiązaniem jest uruchomienie maszyny wirtualnej linux na twoim stosie WAMP i użycie węzła. (następnie wykonaj komunikację TCP między węzłem i php). – Raynos

+0

Nawet MS zdecydowało się na port nodejs dla Windows. Oznacza to, że węzeł ma ogromne możliwości i wsparcie. Sądzę, że nodejowie będą dla ciebie bardziej względni. Dla silników szablonów spójrz na Jade, użyteczne, proste i potężne. –

+0

Dzięki @Pasha - utknąłem z tmpl chociaż jest on już używany w naszym frameworku. – AlienWebguy

Odpowiedz

9

Krótka odpowiedź: użyj węzła. Użyj go teraz. W rzeczywistości jest tu link do najnowszego natywnego pliku .exe systemu Windows, który jest autonomiczny bez zależności: http://nodejs.org/dist/v0.5.4/node.exe

Długa odpowiedź: env.js jest/był fajnym projektem. Symuluje środowisko js w js. Może działać w innych środowiskach i tym podobnych. Cokolwiek, to nie ma znaczenia.

Node.js to środowisko js-hosta działające na V8. V8 jest najszybszym środowiskiem js, zasila Chrome itp. Węzeł sam w sobie jest dla natywnego środowiska systemowego, co zwykłe js jest dla przeglądarki: potężna kombinacja API wymieszanych razem w naparach czarownic z łatwością użycia programisty i szerokim zakresem funkcji zestaw.

W przeglądarce uzyskuje się kontrolę nad wideo, audio, danymi wprowadzanymi przez użytkownika itp. Poprzez rozszerzenia DOM do javascript. Z węzłem na serwerze (lub tylko z własnym komputerem, ma on wiele aplikacji wykraczających poza zwykłe użycie serwera) otrzymujesz niesamowitą obsługę wszystkich typów serwerów IO: http/udp i klientów, którzy wykonują dla ciebie wszystkie operacje, plik I/O, zarządzane strumienie danych do obsługi wspomnianej sieci i plików I/O, dostępu do odrodzenia i komunikacji z procesami podrzędnymi lub rozwidlonymi oraz bezpośredniego dostępu do kompilatora V8 w celu kompilowania i zapisywania/uruchamiania kodu bajtowego javascript.

Co się tyczy DOM, istnieje przynajmniej jedna pełna (HTML) implementacja DOM dla węzła i wielu częściowych. Przynajmniej YUI, jQuery i MooTools, które znam, mogą być uruchamiane w Węzłach trywialnie nad biblioteką DOM, aby skonstruować DOM z dowolnego źródła, jak chciałbyś w przeglądarce, a następnie serializować je do html lub cokolwiek innego.

https://github.com/tmpvar/jsdom to implementacja DOM, która działa w węźle (lub w dowolnym środowisku javascript, które moim zdaniem).

https://github.com/tmpvar/jsdom/blob/master/example/browser/browser.js jest przykładem emulacji przeglądarkę:

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

Niektóre inne libs, które mogą oświecić swoją drogę do decyzji

7

tylko kilka punktów, które warto wziąć pod uwagę.

Różnice między Envjs i Nodejs są ogromne. Envjs to symulowane środowisko przeglądarki, które jest domyślnie implementowane przez Rhino. Ważne jest, aby zauważyć, że można (i deweloperzy) implementować Envjs z Nodejs. Z drugiej strony Nodejs jest i walczył środowisko Javascript dla silnika Googles V8, który jest bardzo silny i istnieje Lot modułów dostępnych

Z tego, co pan powiedział, to brzmi jak szukasz zbudować teml jQuery po stronie klienta na podstawie interakcji użytkowników, kończąc jako coś takiego.

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

które można następnie serializacji w jakiś sposób JSON i przesłać do serwera do odtworzenia (który najwyraźniej zrobione). Po stronie serwera poszukujesz wskazówek, jak można wykonać deserializowany szablon.

W tym szczególnym momencie Gorąco polecam NodeJS z węzła jqtpl modułu, który jest port jQuerys szablonu silnika do nodejs który ma dość duży następujących https://github.com/kof/node-jqtpl

Także jeśli masz zdolność do; Bardzo chciałbym zobaczyć, jak bezpiecznie serializować szablon w JSON, ponieważ uważam to za najtrudniejszą część tego wszystkiego.

+0

Termin "wtyczki" w połączeniu z węzłem sugeruje, że nie używasz węzła. – Raynos

+3

Przepraszam "Moduły" to (trochę niegrzeczne) i dlaczego Węzeł nie jest gotowy na okna, ponieważ dokumentacja bardzo wyraźnie wyjaśnia, jak to zrobić? https://github.com/joyent/node/wiki/Installation – martin