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

09-18 19:33