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