从灰尘模板调用函数

我正在开发一个简单的网站,我需要从数据库中检索对象列表。 我想试试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格式的参数数组(使用单引号)