我正在开发一个简单的网站,需要从数据库中检索对象列表。我想尝试一下nodejs,因此,经过几天的阅读和测试,我终于决定使用此配置:
服务器技术:Nodejs + Express
模板引擎:灰尘
数据库/数据源:解析
我将所有这些东西都连接好了,而且看起来似乎运行良好,但是现在我遇到了第一个问题:我需要从Dust模板调用一个函数,这是代码:
{>layout/}
{<content}
<ul>
{#photos}
<li>{photo.get("name")}{~n}</li>
{/photos}
</ul>
{/content}
但它不起作用,因为它(按字面意思)打印出{photo.get(“ name”)}(而不是打印每张照片的名称)。使用Parse的查询正常工作,因为我可以通过console.log()看到加载的对象。
我是nodejs和灰尘的新手,所以我不确定问题仅与灰尘有关。任何想法?
最佳答案
除了创建一个助手,我没有其他解决方案:
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格式的参数数组(使用单引号)