我目前的任务是为特定的DOM生成并提供集中模板 - 对于这个例子,我们只是说它是一个表单.
基本上我想采用每个表单元素(从标签,输入到div包装器)并将它们保存为单独的模板.
从那里我们将有一个UI,我们的制作人可以将这些表格拼凑在一起.一旦他们决定他们希望如何布置他们的表单(DOM顺序和结构对于这个项目实际上是关键的.它不能只是一个CSS解决方案),我们平台上的脚本将保存一个JSON对象,这将确定基于模板名称的DOM结构,我稍后可以在页面加载时引用它.
我认为这里的理想解决方案是将JSON对象发送到节点服务器或使用envjs以某种方式"构建"此dom,然后将其分配给PHP变量以包含在CodeIgniter视图中,以便可以将其编入索引由谷歌.
我知道JQuery本身与envjs一起工作,我知道有一个节点的JQuery插件,但是,这是我的第一个服务器端JS项目,它恰好是非常重要的.我能够通过命令行让envjs在我的本地机器上工作,但是完成一个简单的任务需要10-30秒.如果envjs是要走的路,我如何让它在后台运行并让脚本引用它?PHP卷曲到Tomcat上的envjs servlet可能吗?
一个警告是我的本地开发人员是WAMP(IT不会让我们拥有本地的unix机器),但我们的测试和生产环境都是LAMP.我有一个个人LAMP服务器我可以测试,如果这是绝对唯一的方式去这里,但在我的个人服务器上编码公司的东西可以让我有点热.
不幸的是,我没有时间研究所有的可能性,尝试/失败,就像我通常在我自己的时间使用新技术一样.想法,指导,代码示例 - 任何可以帮助我决定如何处理这个问题的内容都将非常感激.
简答:使用节点.立即使用它.实际上,这里是最新的本机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扩展到javascript来控制视频,音频,用户输入等.对于服务器上的节点(或者只是您自己的计算机,它有很多应用程序超出常规服务器使用),您将获得对所有类型的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 = 'This is a test This is another test '; document.body.appendChild(el); sys.puts(document.outerHTML);
一些其他的lib可能会启发您的决策方式
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/
只有几点值得考虑.
Envjs和Nodejs之间的差异是巨大的.Envjs是一个模拟的浏览器环境,由Rhino默认实现.值得注意的是,人们可以(和开发人员)使用Nodej实现Envjs.另一方面,Nodejs是Googles V8引擎的一个公平的Javascript环境,它非常强大并且有很多可用的模块
从你所说的,听起来你正在寻找在客户端基于用户交互构建一个jQuery teml,结果就是这样.
然后,您可以以某种JSON方式序列化并发送到服务器进行重现(您显然已经完成了).在服务器端,您正在寻找有关如何执行反序列化模板的指导.
在这一特定点上,我强烈推荐使用node-jqtpl模块的NodeJS,该模块是jQuerys模板引擎到nodejs的一个端口,它具有相当大的跟随https://github.com/kof/node-jqtpl
如果你有能力; 我非常希望看到你如何安全地将模板序列化为JSON,因为我认为这是最困难的部分.