基本上,如果你有一个纯粹的JS应用程序(从socket.io或从带有ajax请求的服务器获取信息),并且你需要在处理它之后显示这些数据,你使用什么技术?
目前我正在使用类似
的代码手动创建元素var myDiv = new Element('div',{ /* options */);
将其注入我需要制作所有DOM结构的地方。我发现这很难维护,尤其是那些可以编写html代码的设计人员,但他们无法从JS编写html代码。
有什么办法可以改善这个过程吗?从ajax获取html更好吗?或者只是在字符串中创建HTML代码?
我正在寻找最佳的维护和资源。
答案 0 :(得分:1)
您正在寻找的是“模板”。
你有一个HTML模板(一些div等),你将它与你在JS中提供的数据绑定。然后,使用您正在使用的任何模板引擎,您都可以获得完整的HTML。
以下是一些模板引擎:
使用板块的代码示例:
var Plates = require('plates'); // specific to node.js, see for client-side use
var html = '<div id="test">Old Value</div>';
var data = { "test": "New Value" };
var output = Plates.bind(html, data);
console.log( output ); // '<div id="test">New Value</div>'
您可以将模板存储在通过ajax加载的单个文件(“templates.html”)中,也可以将其存储在HTML页面中(不建议用于维护事项)。
如果将它们全部存储在外部文件中,您可以执行以下操作:
templates.html:
<!-- text/html isn't parsed by the browser so we can put anything in it -->
<script type="text/html" id="template1">
<!-- put your template in there
</script>
您可以通过getElementById( 'template1' )
获取其内容。
答案 1 :(得分:1)
如果项目处于后期阶段,添加类似jQuery.template插件并在单独的文件中创建模板,则最简单的方法。然后,使用后端将这些和平结合在一起,并在DOM Ready上启动客户端应用程序。
如果您的项目处于早期阶段,请使用AngularJs或BackboneJS框架。相信我值得每一分钱:)
答案 2 :(得分:0)
我建议你看一下Backbone.js。
Backbone.js通过提供模型为Web应用程序提供结构 使用键值绑定和自定义事件,具有丰富API的集合 可枚举函数,具有声明性事件处理的视图,以及 通过RESTful JSON接口将它全部连接到您现有的API
即使我没有使用RESTful接口,我也会使用骨干网。将结构与行为分开很容易......你可以使用jQuery实现相同的功能,但它不会整洁干净。它是MV *框架之一。你有:
最近引起了人们的关注。使用Backbone创建的应用包括:
This是一个很好的资源。
答案 3 :(得分:0)
远程模板http://code.google.com/p/distal/:
<table id="a">
<tr><th>OPINIONS</th></tr>
<tr data-qrepeat="m keywords"><td data-qtext="m.name"></td></tr>
</table>
然后致电:
distal(document.getElementById("a"), {
keywords: [
{name:"Brilliant"}, {name:"Masterpiece"}, {name:"Witty"}
]
});
将成为:
<table>
<tr><th>OPINIONS</th></tr>
<tr><td>Brilliant</td></tr>
<tr><td>Masterpiece</td></tr>
<tr><td>Witty</td></tr>
</table>
答案 4 :(得分:0)
将其注入我需要制作所有DOM结构的地方。我发现这很难维护,尤其是那些可以编写html代码的设计人员,但他们无法从JS编写html代码。
另一个选项是modest。正如您从documentation所看到的,它消除了在javascript中对HTML块的需求。设计人员可以在不需要查看javascript的情况下更改HTML结构,javascript编码器可以使用设计人员定义的参数来填充数据(全部使用javascript)。
这个例子来自自述文件:
HTML:
<div>
<contact>
<name>Casey Jones</name>
<phone>123-456-7890</phone>
</contact>
</div>
使用Javascript:
var contact = {
name : "Casey Jones",
cell : "123-456-7890"
};
var out = modest.render('contact',contact);