🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 我想放点html模板代码 很多时候我们需要放点模板代码在页面中,比如我们在使用` layer.js` 的时候需要使用`html`,但又不想创建一个影响页面的`div`,那么此时我们有很多解决方法, `layer.mobile.js`有个实例是这样做的: ```html <textarea id="demo5a" style="display:none;"> // html </textarea> ``` 但是这样有一个问题,那就是如果我模板里面有`textarea`标签的话,那么就不能使用这种方式了。 `artTemplate.js`包装模板的方式是将模板包在script标签中: ```html <script id="tpl-goods-container" type="text/html"> // html 模板 </script> ``` 这样可以通过 ```javascript $('#ID').html(); ``` 拿到模板内容 而一般在模板里面没有`script`标签吧,所以还是用`script`标签来包裹模板比较合适。 ### 扩展 页面中需要用到模板,这种需求其实很常见,最简单的一种方式就是自己拼接,但是这样实在是太累了,太繁琐,简单的结构还好,要是遇上复杂的结构使用拼接字符串的方式那简直是噩梦,并且这种方式不好维护,代码也不好看。 其实深入的看,拼接字符串生成的`html`,用这种的方式创建`DOM`在编程的思想中是叫做**声明式编程**,比如还有`react`的`JSX`也可以看做是声明式编程,与之对应的是**命令式编程**,命令式编程不利于我们书写大段的页面结构和样式等,其实`JSX`最终是会编译成命令式的。 这样来看的话,我们写的`.html`、`.css`文件其实就是一个声明式编程的文件了。 对于页面和样式的编写,显然声明式编程效率的更高(这是说我们写代码时的效率,不是代码最终执行的性能效率)。而模板引擎就是这个作用,让我们用声明式的方式写模板,因为拼接实在是太麻烦了(还嫌拼接麻烦那么命令式创建`DOM`那真是要人命)。 > 有人可能说写个模板根本算不上编程,还说是声明式编程,好吧,写html、css不叫编程,你说不叫就不叫,不过我想说的是,其实编程这东西本身就不存在,是人们创造出来的,C语言叫编程吗,也是人们创造出来的,编程的目的是为了解决问题的,所有的东西并不是凭空有的,php也是基于C的,html又是基于浏览器解析的,一些编程的概念也是人们设计总结出来的,所以当你说html不配叫编程时,那么你写php的立场又在哪里? ### 参考 - [淘宝详情页的 BigRender 优化与存放大块 HTML 内容的最佳方式](https://lifesinger.wordpress.com/2011/09/23/bigrender-for-taobao-item/) - [layer](http://layer.layui.com/) - [layer.mobile](http://layer.layui.com/mobile/) - [artTemplate](http://aui.github.io/artTemplate/) - [如何在 JS 中嵌入 HTML 代码?](https://www.zhihu.com/question/20240397) - [函数式编程入门教程](http://www.ruanyifeng.com/blog/2017/02/fp-tutorial.html?hmsr=toutiao.io) - [函数式编程和命令式编程](http://blog.csdn.net/bruno231/article/details/6425710) - [声明式编程和命令式编程的比较](http://kb.cnblogs.com/page/181030/) [React 是怎样炼成的](https://mp.weixin.qq.com/s/6i7x8ZgOBU5EijGweXfqdA) [tmodjs/why-tmodjs.md at master · aui/tmodjs](https://github.com/aui/tmodjs/blob/master/doc/why-tmodjs.md) > 它使用一个特殊的<script type="text/html"></script>标签来存放模板(由于浏览器不支持这种类型的声明,它存放的代码不会当作 js 运行,代码也不会被显示出来)。使用模板引擎渲染模板的示例: * * * * * update:2017-3-3 13:57:26