从灰尘模板调用函数
我正在开发一个简单的网站,我需要从数据库中检索对象列表。 我想试试nodejs,经过几天的阅读和testing,我终于决定使用这个configuration:
- 服务器技术: Nodejs + Express
- 模板引擎: 灰尘
- 数据库/数据源: parsing
我连线所有这些东西,它似乎运作良好,但我现在有第一个问题:我需要从一个灰尘模板调用一个函数,这是代码:
{>layout/} {<content} <ul> {#photos} <li>{photo.get("name")}{~n}</li> {/photos} </ul> {/content}
但它不起作用,因为它打印出{photo.get(“name”)} (字面上),而不是打印每张照片的名称。 Parse的查询工作正常,因为我可以通过console.log()看到加载的对象。
我对nodejs和灰尘都是新的,所以我不确定这个问题只与灰尘有关。 任何想法?
除了创build一个帮手外,我没有任何其他解决scheme:
var dust = require('dustjs-linkedin'); dust.helpers.exec = function(chunk, context, bodies, params) { var args = JSON.parse(params.args.replace(/'/g, '"')); var object = context.stack.head; params.func.split('.').some(function(property) { if (typeof(object[property]) === "function") { var result = object[property].apply(object, args); chunk.write(result); return true; } else { object = object[property]; return false; } }) return chunk; };
假设我们有以下数据:
app.get('/dust-test', function(req, res) { function Photo(name) { var props = {'name': name}; this.get = function(prop) { return props[prop]; } } var photos = ['foo', 'bar', 'nanana'].map(function(name) { return new Photo(name); }) res.render("dust-test", { photo: new Photo('me'), photos: photos }); });
用法:
<li>{@exec func="photo.get" args="['name']" /}</li> {#photo} <li>{@exec func="get" args="['name']" /}</li> {/photo} <ul> {#photos} <li>{@exec func="get" args="['name']" /}{~n}</li> {/photos} </ul>
args
– 是json格式的参数数组(使用单引号)