首先看一个需求:
页面上存在一个select box,当选择了下拉框中的一个选项的时候,异步请求获取数据并在页面某个区域显示出来。而且这个显示区域是具有样式和自己固有的js等内容的,并非简单的静态文字。
如果用传统的js方式,我们该如何去实现呢?
这样固然可以解决问题,但是当这个需要展示的DIV非常大的时候,在使用上面的方法,将会是一件非常不可思议的事情。所以势必需要我们去尝试它的更为便捷而且高效不容易出错的方式来解决。
这里我们采用Javascript Template jsfclass="tags" href="/tags/MoBanYinQing.html" title=模板引擎>模板引擎来完成这个工作。
官方网址:http://trimpath.com/project/wiki/JavaScriptTemplates
这是基于js的非常轻量级的跨浏览器框架,可以帮助你完成EL风格的渲染,并返回结果字符串,然后可以通过innerHTML等方式插入到某个隐藏的div中。作为一种ajax风格的交互。
看看怎么来使用 step by step :
1、 跟jquery相似的,需要首先去下载相关的js库 template.js
下载文件并且在页面底部包含进去:
2、在你需要使用的页面埋上一段HTML代码,这段代码即是将用来渲染并展示的内容,通常而言,可以使用一个隐藏的textarea来保存是一个很好的实践:
注意的是,这里我们使用了class="tags" href="/tags/FREEMARKER.html" title=freemarker>freemarker框架,所以页面需要用noparse包含起来以阻止class="tags" href="/tags/FREEMARKER.html" title=freemarker>freemarker将其解析掉。这段代码只是一个模板,所以采用何种方式来保存将取决于个人习惯,这里我们使用的是一个隐藏的textarea
可以看到,jst的风格跟class="tags" href="/tags/FREEMARKER.html" title=freemarker>freemarker或者velocity很相似,都是EL风格,他提供了一些便捷的逻辑操作关键字,如很常用的for和if等,具体的语法我们稍后再讲,这里只是编写页面展示逻辑,像使用class="tags" href="/tags/FREEMARKER.html" title=freemarker>freemarker一样简单。
3、当我们的callback函数执行完异步请求返回结果list之后,我们可以采用如下的方式来渲染模板并展示在页面上
这样就完成了一个渲染并展示的过程,相对于之前的使用字符串拼装的方式,非常便捷,而且不像拼装过程那样很容易出错让人痛苦。
关于jst的语法,可以简单的总结一下:
// 以下代码部分为转帖内容,文字部分个人添加
1、表达式
可以使任何字符串,但是由于我们使用大括号来包装,所以势必名称中在使用大括号{}
可以使用 % 来包含表达式,这样就可以防止当变量名称出现大括号导致的错误情况
IF语句的使用
使用defined库函数判断变量是否已经被定义过
FOR循环
变量定义
宏定义
CDATA 文本区段,内容将不渲染,原样输出
编写内部的JS代码,使用eval标签
其他的语法请参见相关的文档,总而言之,jst是一个非常有用的渲染引擎,可以帮助我们省掉很多的前端工作,提高工作效率,减少出错几率。通过dwr和jst的配合使用,可以营造很好的用户体验,如果再具有一个不错的页面美工,那将是一件非常惬意的事情!