KoaHub平台基于Node.js开发的Koa的模板系统handlebars插件代码详情
koahub-handlebars
koahub-handlebars
koahub handlebars templates
Installation
$ npm install koahub-handlebars
Use with koa
var koa = require('koa'); var hbs = require('koahub-handlebars'); var app = koa(); // koahub-handlebars is middleware. `use` it before you want to render a view app.use(hbs.middleware({ viewPath: __dirname + '/views' })); // Render is attached to the koa context. Call `this.render` in your middleware // to attach rendered html to the koa response body. app.use(function *() { yield this.render('index', {title: 'koahub-handlebars'}); }) app.listen(3000);
Registering Helpers
Helpers are registered using the #registerHelper method. Here is an example using the default instance (helper stolen from official Handlebars docs:
hbs = require('koahub-handlebars'); hbs.registerHelper('link', function(text, url) { text = hbs.Utils.escapeExpression(text); url = hbs.Utils.escapeExpression(url); var result = '<a href="' + url + '">' + text + '</a>'; return new hbs.SafeString(result); });
Your helper is then accessible in all views by using, {{link "Google" "http://google.com"}}
The registerHelper
, Utils
, and SafeString
methods all proxy to an internal Handlebars instance. If passing an alternative instance of Handlebars to the middleware configurator, make sure to do so before registering helpers via the koahub-handlebars proxy of the above functions, or just register your helpers directly via your Handlebars instance.
You can also access the current Koa context in your helper. If you want to have a helper that outputs the current URL, you could write a helper like the following and call it in any template as {{requestURL}}
.
hbs.registerHelper('requestURL', function() { var url = hbs.templateOptions.data.koa.request.url; return url; });
Registering Partials
The simple way to register partials is to stick them all in a directory, and pass the partialsPath
option when generating the middleware. Say your views are in ./views
, and your partials are in ./views/partials
. Configuring the middleware via
app.use(hbs.middleware({ viewPath: __dirname + '/views', partialsPath: __dirname + '/views/partials' }));
will cause them to be automatically registered. Alternatively, you may register partials one at a time by calling hbs.registerPartial
which proxies to the cached handlebars #registerPartial
method.
Layouts
Passing defaultLayout
with the a layout name will cause all templates to be inserted into the {{{body}}}
expression of the layout. This might look like the following.
<!DOCTYPE html> <html> <head> <title>{{title}}</title> </head> <body> {{{body}}} </body> </html>
In addition to, or alternatively, you may specify a layout to render a template into. Simply specify {{!< layoutName }}
somewhere in your template. koahub-handlebars will load your layout from layoutsPath
if defined, or from viewPath
otherwise.
At this time, only a single content block ({{{body}}}
) is supported.
Options
The plan for koahub-handlebars is to offer identical functionality as koa-hbs (eventaully). These options are supported now.
viewPath
: [required] Full path from which to load templates (Array|String
)handlebars
: Pass your own instance of handlebarstemplateOptions
: Hash of handlebars options to pass totemplate()
extname
: Alter the default template extension (default:'.html'
)partialsPath
: Full path to partials directory (Array|String
)defaultLayout
: Name of the default layoutlayoutsPath
: Full path to layouts directory (String
)disableCache
: Disable template caching (default:'.true'
)
Locals
Application local variables ([this.state](https://github.com/koajs/koa/blob/master/docs/api/context.md#ctxstate)
) are provided to all templates rendered within the application.
app.use(function *(next) { this.state.title = 'My App'; this.state.email = 'me@myapp.com'; yield next; });
The state object is a JavaScript Object. The properties added to it will be exposed as local variables within your views.
<title>{{title}}</title> <p>Contact : {{email}}</p>
Thanks
Differents
- Configuration file incremental changes
- Modify some of the features and the default configuration
- ...
代码地址:http://js.koahub.com/home/feature/koahub-handlebars
KoaHub平台基于Node.js开发的Koa的模板系统handlebars插件代码详情的更多相关文章
- KoaHub平台基于Node.js开发的Koa的get/set session插件代码详情
koa-session2 Middleware for Koa2 to get/set session use with custom stores such as Redis or mongodb ...
- KoaHub平台基于Node.js开发的Koa 连接支付宝插件代码信息详情
KoaHub平台基于Node.js开发的Koa 链接支付宝插件代码信息详情 easy-alipay alipay payment & notification APIs easy-alipay ...
- KoaHub平台基于Node.js开发的Koa的简单包装到请求库的类似接口
co-request co-request promisify wrapper for request co-request Simple wrapper to the request library ...
- KoaHub平台基于Node.js开发的Koa JWT认证插件代码信息详情
koa-jwt Koa JWT authentication middleware. koa-jwt Koa middleware that validates JSON Web Tokens and ...
- KoaHub平台基于Node.js开发的Koa的调试实用程序
debug small debugging utility debug tiny node.js debugging utility modelled after node core's debugg ...
- KoaHub平台基于Node.js开发的Koa的连接MongoDB插件代码详情
koa-mongo MongoDB middleware for koa, support connection pool. koa-mongo koa-mongo is a mongodb midd ...
- KoaHub平台基于Node.js开发的Koa的rewrite and index support插件代码详情
koa-static-server Static file serving middleware for koa with directory, rewrite and index support k ...
- KoaHub平台基于Node.js开发的Koa的skip插件代码详情
koahub-skip koahub skip middleware koahub skip Conditionally skip a middleware when a condition is m ...
- KoaHub平台基于Node.js开发的Koa router路由插件代码信息详情
koa-router Router middleware for koa. Provides RESTful resource routing. koa-router Router mid ...
随机推荐
- 基于监听的事件处理——Activity本身作为事件监听器
这种形式使用Activity本身作为监听器类,可以直接在Activity类中定义事件处理方法,这种形式非常简洁.但这种做法有两个缺点: 这种形式可能造成程序结构混乱,Activity的主要职责应该是完 ...
- BOM总结
一.BOM概念 BOM:Browser Object Model 浏览器对象模型,定义了JS操作浏览器的一些方法和属性 二.BOM方法 (在BOM里面大部分的方法都是调用window对象下的方法得到 ...
- adb server无法启动方法,结束占用端口的进程
adb server is out of date. killing...ADB server didn't ACK* failed to start daemon *error: unknown ...
- jQuery attr removeAttr 属性操作
jQuery attr removeAttr 属性操作 <%@ page language="java" import="java.util.*" pag ...
- doubango(6)--Doubango协议栈中对RTP的管理
相关数据结构 1. tsip_dialog_invite_t 描述: 一个invite_dialog代表了一个invite期间的所有的信令流程,因此,它首先是一个普遍的dialog的特殊化结构, ...
- Hadoop-2.x启动HDFS和YARN的方式
逐一启动(实际生产环境中的启动方式) * sbin/hadoop-daemon.sh start|stop namenode|datanode|journalnode * sbin/yarn-daem ...
- C++编程练习(3)----“实现简单的栈的顺序存储结构“
栈(stack)是限定仅在表尾进行插入和删除操作的线性表. 允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom). 栈又称为后进先出(Last In First Out)的线性表,简 ...
- 纯CSS3动画:一棵跳舞的树
<!DOCTYPE html><head><meta http-equiv="Content-Type" content="text/htm ...
- JAVA逻辑运算符
逻辑运算符,用于链接boolean类型的表达式. AND与 (&)OR或 (|)XOR异或 (^)Not非 (!)AND双与短路 (&&)OR双与短路 (||) 与(& ...
- 读书笔记 effective c++ Item 8 不要让异常(exceptions)离开析构函数
1.为什么c++不喜欢析构函数抛出异常 C++并没有禁止析构函数出现异常,但是它肯定不鼓励这么做.这是有原因的,考虑下面的代码: class Widget { public: ... ~Widget( ...