首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nodejs或envjs - dynamic jquery tmpl

nodejs或envjs - dynamic jquery tmpl
EN

Stack Overflow用户
提问于 2011-08-13 04:11:34
回答 2查看 1.6K关注 0票数 10

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

基本上,我希望将每个表单元素(从标签、输入到div包装器)保存为单独的templates

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

我认为理想的解决方案是将JSON对象发送到节点服务器,或者使用envjs以某种方式‘构建’这个dom,然后将其赋值给一个包含在CodeIgniter视图中的PHP变量,这样Google就可以对其进行索引。

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

需要注意的是,我的本地开发环境是WAMP (它不允许我们使用本地unix机器),但是我们的测试和生产环境都是LAMP。我确实有一个个人LAMP服务器,如果这是绝对唯一的方法,我可以测试一下,但是在我的个人服务器上编写公司的东西可能会让我遇到一些麻烦。

不幸的是,我没有时间研究所有的可能性和尝试/失败,因为我通常会在我自己的时间与新技术。想法,指导,代码示例-任何可以帮助我决定如何处理这一点的东西都将非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-19 04:56:13

简而言之:使用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组合混合在一起,具有开发人员的易用性和功能集的广泛性。

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

关于DOM,至少有一个完整(html)的DOM for节点实现和多个部分实现。据我所知,至少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是一个模拟浏览器的示例:

代码语言:javascript
复制
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);

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

票数 9
EN

Stack Overflow用户

发布于 2011-08-15 07:22:19

只有几点值得考虑。

EnvjsNodejs的区别是巨大的。Envjs是默认情况下由Rhino实现的模拟浏览器环境。重要的是要注意,可以(并且开发人员已经)使用Nodejs实现Envjs。另一方面,Nodejs是一个针对Googles V8引擎的事件Javascript环境,它非常强大,并且有很多模块可用

根据您所说的,您似乎希望在客户端基于用户交互构建一个jQuery teml,结果如下所示。

代码语言:javascript
复制
<script id="dynamicTemplate" type="text/x-jquery-tmpl">
    {{tmpl "smallTemplate1"}}
    <tr><td>key: ${value}</td></tr>
</script>

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

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

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7045770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档