nodejs or envjs - dynamic jquery tmpl



我当前的任务是为一个特定的DOM生成并提供集中的模板——在本例中,我们假设它是一个表单。

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

从那里,我们将有一个UI,我们的生产者可以拼凑这些表单。一旦他们决定了表单的布局方式(DOM的顺序和结构实际上对这个项目至关重要)。它不能是一个只有css的解决方案),我们平台端的脚本将保存一个JSON对象,该对象将根据模板名称确定DOM的结构,我可以稍后在页面加载时引用该模板名称。

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

我知道JQuery与envjs原生工作,我知道有一个JQuery插件的节点,但唉,这是我的第一个服务器端JS项目,它恰好是相当重要的。我可以通过命令行让envjs在我的本地机器上工作,但是完成一个简单的任务需要10-30秒。如果envjs是要走的路,我怎么能保持它在后台运行,并有脚本引用它?PHP curl到一个envjs servlet在Tomcat上可能?

一个警告是我的本地开发是WAMP (IT不允许我们有本地unix机器),但我们的测试和生产环境都是LAMP。我确实有一个个人的LAMP服务器,我可以在上面测试,如果这是唯一的方法的话,但是在我的个人服务器上编写公司的东西会让我很热。

不幸的是,我没有时间去研究所有的可能性和尝试/失败,因为我通常会在自己的时间里使用新技术。想法,指导,代码示例-任何可以帮助我决定如何接近这将是非常感激的。

简短的回答:使用node。现在就使用它。事实上,这里有一个链接到最新的本机Windows .exe,它是独立的,没有依赖关系:http://nodejs.org/dist/v0.5.4/node.exe

长答案:env.js是/是一个很酷的项目。它在js中模拟js环境。它可以在其他环境中运行。不管怎样,都没关系。

Node.js是一个运行在V8之上的js主机环境。V8是最快的js环境,支持Chrome等。Node本身对于本地系统环境的作用,就像普通的js对于浏览器的作用一样:一个强大的api组合,混合在一起,使开发人员易于使用,并且具有广泛的特性集。

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

关于DOM,至少有一个完整的(html)节点DOM实现和多个部分实现。至少YUI, jQuery和MooTools,我知道可以在DOM库上运行在Node中,从任何源构建DOM,就像在浏览器中一样,然后将其序列化为html或其他。

https://github.com/tmpvar/jsdom是运行在node(或任何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);

其他一些可能会启发你做决定的库

  • https://github.com/andreasgal/dom.js(或我的分叉以简化在Node中的使用:https://github.com/Benvie/dom.js)
  • http://lightnode.ngspinners.com/
  • http://stephank.github.com/domjuice/
  • https://github.com/hij1nx/weld
  • http://visionmedia.github.com/caustic/

有几点值得考虑。

EnvjsNodejs之间的差异是巨大的。Envjs是一个模拟的浏览器环境,由Rhino默认实现。需要注意的是,开发者可以(并且已经)使用Nodejs实现Envjs。另一方面,Nodejs是谷歌V8引擎的事件Javascript环境,这是非常强大的,有一个Lot模块可用

从您所说的,听起来像是您正在寻找基于用户交互在客户端构建一个jQuery teml,最终像这样。

<script id="dynamicTemplate" type="text/x-jquery-tmpl">
    {{tmpl "smallTemplate1"}}
    <tr><td>key: ${value}</td></tr>
</script>
然后您可以以某种JSON方式序列化它并将其发送到服务器以重新生成(显然您已经这样做了)。在服务器端,您正在寻找如何执行反序列化模板的指导。

在这一点上,我强烈推荐NodeJS与node-jqtpl模块,这是jquery模板引擎到NodeJS的一个端口,它有相当大的追随者https://github.com/kof/node-jqtpl

也如果你有能力;我非常想看看如何安全地将模板序列化为JSON,因为我认为这是最困难的部分。

最新更新