我将连接角色与灰尘模板相结合 ejs模板有类似这样的语法
<% if (userCan('impersonate')) { %>
<button id="impersonate">Impersonate</button>
<% } %>
和那个在玉器中
if userCan('impersonate')
button#impersonate Impersonate
如何在尘土中做到这一点?
{@eq key=userCan('edit data') value="true" }
<td><a href='/assets/edit/{.ID_ASSET}'>Edit</a></td>
<td><a href='/assets/delete/{.ID_ASSET}'>Delete</a></td>
{:else}
{/eq}
此代码给我一个错误
Wed, 06 Jan 2016 16:57:47 GMT uncaughtException Expected end tag for assets but it was not found. At line : 42, column : 13
编辑:
我在{@contextDump key="full"/}
"tail": {},
"isObject": true,
"head": {
"enrouten": {
"routes": {},
"path": "function path(name, data) {var route;route = this.routes[name];if (typeof route === 'string') {return path2regexp.compile(route)(data);}return undefined;}"
},
"userIs": "function (action) {var act = ert(req, action);return roles.test(req, act)}",
"userCan": "function (action) {var act = ert(req, action);return roles.test(req, act)}",
"isAuthenticated": "function () { [native code] }",
"_csrf": "FSaqN0PWxOF4slTUfnGHXJ0NkPOTJFl0u57eM=",
"title": "Справочник спецификаций",
"assets": [
{
"ID_ASSET": 1,
"SYMBOL_KODE": "12.TR.18",
"DOK_NAME": "ТХ9042",
"DESCRIPTION": "Контроллер программируемый ТХ9042",
"DATE_RELISE": "2001-10-04T21:00:00.000Z",
"POS_KODE": "pos kode 1 ",
这是我的控制器
router.get('/', function (req, res) {
var context = {
req: req, // from Express callback
userCan: function(chunk, context, bodies, params) {
var permission = context.resolve(params.permission);
return context.get('req').userCan(permission);
}
}
models.SPR_ASSET.findAll({
include: [ models.SPR_TYPE_UM, models.SPR_TYPE_ASSETS, models.SPR_ASSETS_DS ]
}).then(function(assets) {
res.render('assets', {
title: 'Справочник спецификаций',
assets: assets
context: context
});
});
var context
这里没有工作
答案 0 :(得分:4)
尘埃并不知道什么是功能。它只知道&#34;引用&#34;,它们是你上下文中的键。
如果上下文中的键是一个函数,Dust将调用该函数并在其渲染中使用结果。这些函数称为上下文帮助程序,您可以阅读它们in the documentation。或者,您可以直接在Dust注册函数,这些函数可以在任何地方访问 - 这些函数称为全局帮助程序。
如果userCan
是某种连接角色可用的全局,您可以在这样的全局帮助器中使用它:
dust.helpers.userCan = function(chunk, context, bodies, params) {
var permission = context.resolve(params.permission);
return userCan(permission);
}
在你的模板中:
{@userCan permission="edit data"}
<td><a href='/assets/edit/{.ID_ASSET}'>Edit</a></td>
<td><a href='/assets/delete/{.ID_ASSET}'>Delete</a></td>
{:else}
Please log in.
{/userCan}
编辑:看起来userCan
是请求范围的,因此您可以通过将请求变量添加到您的上下文来使用它。类似的东西:
var context = {
req: req, // from Express callback
userCan: function(chunk, context, bodies, params) {
var permission = context.resolve(params.permission);
return context.get('req').userCan(permission);
}
}
{#userCan permission="edit data"}
<td><a href='/assets/edit/{.ID_ASSET}'>Edit</a></td>
<td><a href='/assets/delete/{.ID_ASSET}'>Delete</a></td>
{:else}
Please log in.
{/userCan}
要清楚,在Dust中直接在模板中调用函数有 no 方法 - 它不支持任意JS执行。要调用带参数的函数,必须提供一个调用函数的帮助器,以便它可以将参数转换为函数所期望的格式。