thinkjs-behavior-ejs

0.0.4 • Public • Published

thinkjs-behavior-ejs

这是一个ThinkJS的插件,实现EJS模版的前后台共享。在ThinkJS项目中引入此插件,只需在后台声明一次EJS模版,前台就能复用模版,无需再到前台重新声明。

使用方法

1、引入Behavior

注意! thinkjs v1.1.x 及以上版本需要在App/Conf/common.js中前置引入thinkjs-behavior-ejs,如下:

// 这个引入必须前置在定义 ejs filter 之前声明
thinkRequire('thinkjs-behavior-ejs');

App/Conf/tag.js中写入代码:

var ejsBehavior = thinkRequire('thinkjs-behavior-ejs');
module.exports = {
    view_parse: [false, function(http, data) { return ejsBehavior(http).run(data); }]
};

参考:ThinkJS Behavior

2、声明需要共享模版的action

App/Conf/config.js写入配置:

ejs_behavior_actions: ['home/index/list']

提示:action需要写完整路径,不能写缩写,比如配置了route的缩写。

3、创建模版目录

在对应的App/View/[Group目录]下创建文件夹tpl。比如上面写的home/index/list,就是在App/View/Home目录下创建tpl文件夹。

4、创建共享模版

tpl文件夹下创建模版,命名格式:[controller]_[action]_[自定义名称].html

例如:index_list_paging.html,前面index_list与View的模版命名相同,后缀不一定是.html,而是config.js中定义的tpl_file_suffix。参考:ThinkJS 默认配置

5、后台View引用共享模版

在View中,直接使用include引入共享模版。

<% include tpl/index_list_paging.html %>

6、将共享模版输出给前台

在View的页面底部,找一个合适的位置,写入代码:

<script src="/resource/lib/ejs-0.8.6/ejs.min.js"></script>
<%- _ejs_templates %>

提示_ejs_templates不能使用=输出,使用=会被转义。

7、在前台使用模版

在第6步中,_ejs_templates会向页面输出模版代码,并为每个模版重新分配一个id,id格式为:_ejs_tpl_[controller]_[action]_[自定义名称],这个自定义名称就是第4步中提到的模版自定义名称。

那么,前台就能直接使用ejs接口调用模版,如下:

ejs.compile($('#_ejs_tpl_index_list_paging').html());

复杂应用

共享filter

如果你在ThinkJS中需要使用EJS的filter特性,那么,你可以在App/Common/common.js中定义filter,比如:

// ejs 一定要通过 thinkRequire 引入,不要使用 require()
// 如果使用 require() 会导致 View 模版无法找到filter
var ejs = thinkRequire('ejs');

ejs.filters.getVersion = function(o) {
    return 'v' + o.version + '-' + moment(o.create_time).format('YYYYMMDD');
};

当这么定义ejs.filters之后,thinkjs-behavior-ejs会将你声明的filter一并输出到前台,提供给前台使用。

例子

参考:https://github.com/maxzhang/lavaflow

Readme

Keywords

none

Package Sidebar

Install

npm i thinkjs-behavior-ejs

Weekly Downloads

4

Version

0.0.4

License

none

Last publish

Collaborators

  • zhangdaiping