gpt4 book ai didi

dust.js - DustJs 中的函数调用和检查结果

转载 作者:行者123 更新时间:2023-12-04 19:50:04 25 4
gpt4 key购买 nike

我正在将连接角色与灰尘模板相结合
ejs 模板有类似这样的语法

<% if (userCan('impersonate')) { %>
<button id="impersonate">Impersonate</button>
<% } %>

那在 Jade
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 ",

这是我的 Controller
    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这里没有用

最佳答案

灰尘不知道什么是功能。它只知道“引用”,这是您上下文中的键。

如果上下文中的键是一个函数,Dust 将调用该函数并在其渲染中使用结果。这样的函数被称为 上下文助手 ,您可以阅读有关它们的信息 in the documentation .或者,您可以直接向 Dust 注册可在任何地方访问的函数——这些被称为 全局 helper .

userCan是 connect-roles 提供的某种全局变量,您可以在这样的全局助手中使用它:

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 模板中调用函数的方法——它不支持任意 JS 执行。要调用带参数的函数,您必须提供一个调用函数的帮助程序,以便它可以将参数转换为您的函数期望的格式。

关于dust.js - DustJs 中的函数调用和检查结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34638580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com