2011-08-12 9 views
10

Nhiệm vụ hiện tại của tôi là tạo và cung cấp các mẫu tập trung cho một DOM cụ thể - ví dụ này, hãy chỉ nói đó là một biểu mẫu.nodejs hoặc envjs - dynamic jquery tmpl

Về cơ bản, tôi muốn lấy từng phần tử biểu mẫu (từ nhãn, tới đầu vào, đến trình bao bọc div) và lưu chúng dưới dạng riêng lẻ templates.

Từ đó, chúng tôi sẽ có giao diện người dùng nơi các nhà sản xuất của chúng tôi có thể ghép các mẫu này lại với nhau. Một khi họ quyết định cách họ muốn hình thức của họ được đặt ra (thứ tự DOM và cấu trúc thực sự quan trọng đối với dự án này. Nó không thể là giải pháp chỉ CSS), một kịch bản trên nền tảng của chúng tôi sẽ lưu một đối tượng JSON sẽ xác định cấu trúc của DOM dựa trên tên mẫu mà tôi có thể tham khảo khi tải trang sau này. Tôi nghĩ rằng một giải pháp lý tưởng ở đây sẽ là gửi đối tượng JSON đến một máy chủ nút hoặc sử dụng envjs bằng cách nào đó để 'xây dựng' dom này và sau đó gán nó cho một biến PHP để được bao gồm trong chế độ xem CodeIgniter như vậy nó có thể được lập chỉ mục bởi Google.

Tôi biết JQuery hoạt động nguyên bản với envjs và tôi biết có một JQuery plugin for node, nhưng than ôi, đây là dự án JS phía máy chủ đầu tiên của tôi và nó diễn ra khá lớn. Tôi đã có thể nhận được envjs làm việc trên máy địa phương của tôi thông qua dòng lệnh nhưng phải mất một 10-30 giây tốt để hoàn thành một nhiệm vụ đơn giản. Nếu envjs là con đường để đi, làm thế nào tôi có thể giữ cho nó chạy trong nền và có kịch bản tham khảo nó? PHP curl đến một servlet envjs trên Tomcat có thể?

Một báo trước là dev địa phương của tôi là WAMP (CNTT sẽ không cho phép chúng tôi có các máy Unix cục bộ) nhưng môi trường thử nghiệm và sản xuất của chúng tôi đều là LAMP. Tôi có một máy chủ LAMP cá nhân mà tôi có thể kiểm tra nếu đó là cách duy nhất tuyệt đối để đến đây, nhưng việc mã hóa các công cụ của công ty trên máy chủ cá nhân của tôi có thể khiến tôi nóng lên.

Thật không may là tôi không có thời gian để nghiên cứu tất cả các khả năng và thử/thất bại như tôi thường làm với các công nghệ mới theo thời gian của riêng mình. Ý tưởng, hướng dẫn, ví dụ mã - mọi thứ có thể giúp tôi quyết định cách tiếp cận điều này sẽ được đánh giá cao.

+4

Envjs không có bất cứ nơi nào gần sự hỗ trợ và cộng đồng mà nút có. Nút không sẵn sàng cho cửa sổ. Đặt cược tốt nhất là chạy một máy ảo Linux trên ngăn xếp WAMP và nút sử dụng của bạn. (sau đó thực hiện giao tiếp TCP giữa nút & php) – Raynos

+0

Ngay cả MS cũng đã quyết định cổng nodejs cho các cửa sổ. Điều đó có nghĩa là nút có cơ hội và hỗ trợ tuyệt vời. Tôi đoán rằng nodejs sẽ có liên quan nhiều hơn cho bạn. Đối với các công cụ mẫu, hãy xem Jade nó hữu ích, đơn giản và mạnh mẽ. –

+0

Cảm ơn @Pasha - Tôi đang mắc kẹt với tmpl mặc dù vì nó được sử dụng trong suốt khuôn khổ của chúng tôi rồi. – AlienWebguy

Trả lời

9

Câu trả lời ngắn: sử dụng nút. Sử dụng nó ngay bây giờ. Trên thực tế, đây là liên kết đến Windows .exe bản địa mới nhất độc lập với không phụ thuộc: http://nodejs.org/dist/v0.5.4/node.exe

Câu trả lời dài: env.js là/là một dự án tuyệt vời. Nó mô phỏng một môi trường js trong js. Nó có thể chạy trong các môi trường và nội dung khác. Dù sao thì cũng không sao cả.

Node.js là môi trường máy chủ lưu trữ js chạy trên đầu V8. V8 là môi trường js nhanh nhất, có chức năng Chrome, v.v. Node chính là môi trường hệ thống gốc js thường xuyên cho trình duyệt: một sự kết hợp mạnh mẽ của các API được trộn lẫn với nhau trong một phù thủy dễ sử dụng và bề rộng của tính năng bộ.

Trên trình duyệt, bạn có quyền kiểm soát video, âm thanh, đầu vào của người dùng, v.v. qua tiện ích mở rộng DOM tới javascript. Với nút trên máy chủ (hoặc chỉ máy tính của riêng bạn, nó có rất nhiều ứng dụng ngoài việc sử dụng máy chủ thông thường), bạn sẽ nhận được sự hỗ trợ đáng kinh ngạc cho tất cả các loại máy chủ và máy khách IO/http/udp làm tất cả công việc soạn sẵn cho bạn, tệp I/O, luồng dữ liệu được quản lý để xử lý mạng và tệp I/O, truy cập để sinh sản và giao tiếp với quá trình con hoặc ngã ba và truy cập trực tiếp vào trình biên dịch của V8 để biên dịch và lưu/chạy javascript bytecode.

Về DOM, có ít nhất một (html) thực thi đầy đủ DOM cho nút và nhiều phần một phần. Ít nhất YUI, jQuery và MooTools mà tôi biết có thể chạy trong Node trivially trên đầu thư viện DOM để xây dựng DOM từ bất kỳ nguồn nào bạn muốn như bạn làm trong trình duyệt và sau đó tuần tự hóa nó thành html hoặc bất kỳ thứ gì.

https://github.com/tmpvar/jsdom là triển khai DOM chạy trên nút (hoặc bất kỳ môi trường javascript nào mà tôi tin).

https://github.com/tmpvar/jsdom/blob/master/example/browser/browser.js là một ví dụ về mô phỏng một trình duyệt:

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

Một số libs khác có thể soi sáng con đường của bạn để quyết định

7

chỉ là một vài điểm đáng xem xét.

Sự khác biệt giữa EnvjsNodejs là bao la. Envjs là một môi trường trình duyệt mô phỏng được thực hiện theo mặc định bởi Rhino. Điều quan trọng cần lưu ý là người ta có thể (và các nhà phát triển có) thực hiện Envjs với Nodej. Mặt khác, Nodejs là một môi trường Javascript có sự kiện cho động cơ V8 của Googles, rất mạnh mẽ và có một số của các mô-đun có sẵn

Từ những gì bạn đã nói, có vẻ như bạn đang tìm cách xây dựng một jQuery teml ở phía máy khách dựa trên tương tác của người dùng, kết thúc như một thứ tương tự.

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

nào thì bạn có thể serialize trong một số JSON cách và gửi đến một máy chủ để tái tạo (mà bạn đã rõ ràng thực hiện). Đó là ở phía máy chủ mà bạn đang tìm kiếm hướng dẫn để làm thế nào bạn có thể thực hiện các mẫu deserialized.

Trong điểm cụ thể này, tôi rất muốn giới thiệu NodeJS với nút-jqtpl mô-đun mà là một cảng jQuerys mẫu động cơ để nodejs trong đó có khá nhiều người theo https://github.com/kof/node-jqtpl

Ngoài ra nếu bạn có khả năng; Tôi rất muốn xem làm thế nào bạn an toàn serialize các mẫu vào JSON, như tôi sẽ xem xét điều này một phần khó khăn nhất của tất cả.

+0

Thuật ngữ "plugins" kết hợp với nút đề xuất bạn không sử dụng nút. – Raynos

+3

Xin lỗi "Mô-đun" sau đó (một chút thô lỗ tho), và tại sao Nút không sẵn sàng cho các cửa sổ vì tài liệu giải thích rất rõ ràng làm thế nào để làm như vậy? https://github.com/joyent/node/wiki/Installation – martin