10

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

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

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

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

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

需要注意的是,我的本地开发人员是 WAMP(它不会让我们拥有本地 unix 机器),但我们的测试和生产环境都是 LAMP。我确实有一个个人 LAMP 服务器,我可以测试这是否是进入这里的唯一方法,但是在我的个人服务器上编码公司的东西会让我有些热度。

不幸的是,我没有时间研究所有可能性并尝试/失败,因为我通常会在自己的时间使用新技术。想法、指导、代码示例——任何可以帮助我决定如何处理的东西都将不胜感激。

4

2 回答 2

9

简短的回答:使用节点。立即使用它。事实上,这里是最新的本地 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 的强大组合,混合在一起,为开发人员的易用性和功能的广度带来了魔力放。

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

关于 DOM,对于节点和多个部分的 DOM 至少有一个完整的 (html) 实现。至少我所知道的 YUI、jQuery 和 MooTools 可以在 DOM 库之上的 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);

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

于 2011-08-18T20:56:12.983 回答
7

只有几点值得考虑。

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

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

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

然后您可以以某种JSON方式对其进行序列化并发送到服务器进行重现(您显然已经完成了)。在服务器端,您正在寻找有关如何执行反序列化模板的指导。

在这一点上,我强烈推荐带有node-jqtpl模块的 NodeJS,它是 jQuerys 模板引擎到 nodejs 的一个端口,它有相当多的关注https://github.com/kof/node-jqtpl

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

于 2011-08-14T23:22:19.047 回答