nodejs或envjs - 动态jquery tmpl

时间:2011-08-12 20:11:34

标签: jquery node.js jquery-templates envjs

我目前的任务是为特定的DOM生成并提供集中模板 - 对于这个例子,我们只是说它是一个表单。

基本上我想把每个表单元素(从标签,输入到div包装器)并将它们保存为单独的templates

从那里我们将有一个UI,我们的制作人可以将这些表格拼凑在一起。一旦他们决定他们希望如何布置他们的表单(DOM顺序和结构对于这个项目实际上是关键的。它不能只是一个CSS解决方案),我们平台上的脚本将保存一个JSON对象,这将确定基于模板名称的DOM结构,我稍后可以在页面加载时引用它。

我认为这里理想的解决方案是将JSON对象发送到节点服务器或使用envjs以某种方式“构建”此dom,然后将其分配给PHP变量以包含在CodeIgniter视图中,以便它可以被Google编入索引。

我知道JQuery本身与envjs一起工作,我知道有一个JQuery plugin for node,但是,这是我的第一个服务器端JS项目,它恰好是非常重要的。我能够通过命令行让envjs在我的本地机器上工作,但是完成一个简单的任务需要10-30秒。如果envjs是要走的路,我如何让它在后台运行并让脚本引用它? PHP卷曲到Tomcat上的envjs servlet可能吗?

一个警告是我的本地开发人员是WAMP(IT不会让我们拥有本地的unix机器),但我们的测试和生产环境都是LAMP。我有一个个人LAMP服务器我可以测试,如果这是绝对唯一的方式去这里,但在我的个人服务器上编码公司的东西可以让我有点热。

不幸的是,我没有时间研究所有的可能性,尝试/失败,就像我通常在我自己的时间使用新技术一样。想法,指导,代码示例 - 可以帮助我决定如何处理这个问题的任何事情都将非常感激。

2 个答案:

答案 0 :(得分:9)

简答:使用节点。立即使用它。实际上,这里是最新的本机Windows .exe的链接,它是独立的,没有依赖项:http://nodejs.org/dist/v0.5.4/node.exe

答案很长:env.js是一个很酷的项目。它模拟了js中的js环境。它可以在其他环境和东西中运行。无论如何,都没关系。

Node.js是一个在V8之上运行的js主机环境。 V8是最快的js环境,支持Chrome等。节点本身适用于本机系统环境,常见的js是浏览器:混合在一起的API的强大组合,可以方便开发人员使用和广泛的功能集。

在浏览器上,您可以通过DOM扩展程序控制视频,音频,用户输入等。对于服务器上的节点(或者只是您自己的计算机,它有很多应用程序超出常规服务器使用),您将获得对所有类型的IO的不可思议的支持:http / udp服务器和为您完成所有样板工作的客户端,文件I / O,托管数据流,用于处理所述网络和文件I / O,访问生成并与子进程或fork进程通信,以及直接访问V8的编译器以编译和保存/运行javascript字节码。

关于DOM,对于节点和多个部分DOM至少有一个完整的(html)DOM实现。至少我所知道的YUI,jQuery和MooTools可以在Node库中轻松地在Node中运行,以便像你在浏览器中那样从你想要的任何源构建DOM,然后将其序列化为html或者其他任何东西。

https://github.com/tmpvar/jsdom是在节点(或我认为的任何javascript环境)上运行的DOM实现。

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

其他一些可能启发您决策的库

答案 1 :(得分:7)

只有几点值得考虑。

Envjs Nodejs 之间的差异是巨大的。 Envjs是一个模拟的浏览器环境,由Rhino默认实现。值得注意的是,人们可以(和开发人员)使用Nodej实现Envjs。另一方面,Nodejs是Googles V8引擎的一个公平的Javascript环境,非常强大,并且有一个很多的模块

根据您的说法,听起来您希望根据用户的交互在客户端构建一个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,因为我认为这是最困难的部分。