在jade过滤器中使用locales选项失败

时间:2013-09-15 20:05:36

标签: javascript node.js pug

我正在尝试在过滤器中使用locales选项但面临问题,无法从过滤器访问该区域设置对象。

区域设置: json {"title": "HAMPI"}

过滤器:

var jade = require(jade);
jade.filters.Posts = function(block) {
    return '{block:Posts}'+jade.render(block)+'{/block:Posts}';
};

输入:

body
    |#{title}
    :Posts
        div
            a
                #{title}

输出:

<body>
    HAMPI
    {block:Posts}<div><a><undefined></undefined></a></div>{/block:Posts}
</body>

我可以修复或处理此错误吗?

PS 您可以查看此repository中的代码 - 我正在使用grunt和grunt-contrib-jade插件,但要强制grunt-contrib-jade使用过滤器应编辑./node_modules/grunt-contrib-jade/tasks/jade.js以反映此changes中的pull request

1 个答案:

答案 0 :(得分:1)

在编译时应用过滤器,其中可以在运行时完成对局部变量的访问。因此过滤器无法访问您的本地变量。他们只看到原始文本。所以你可以这样做:

jade.filters.Posts = function(block) {
    return '{block:Posts}'+block+'{/block:Posts}'; //remove render
};

这样,您将推迟#{title}的渲染,直到您拥有变量。它产生这个输出。

<body>HAMPI{block:Posts}HAMPI{/block:Posts}</body>

我是如何测试的:

var jade = require(jade);
fn = function(block) {
    return '{block:Posts}'+jade.render(block)+'{/block:Posts}';
};
var fn = jade.compile(fs.readFileSync(__dirname + '/file2.jade'));
console.log(fn({"title": "HAMPI"}));

此处提到了同样的问题:in node.js, how to pass variables to :stylus filter from jade?

供参考,您可以看到以下链接:

[<强>更新

如果你想使用渲染,那么为什么不用它传递本地变量。所以如果你这样做:

jade.filters.Posts = function(block) {
    return '{block:Posts}'+jade.render(block,{"title": "HAMPI"})+'{/block:Posts}'
};

它给出了这个:

<body>HAMPI{block:Posts}<div><a><HAMPI></HAMPI></a></div>{/block:Posts}</body>

作为您的观点的缺点是本地不能使用,您必须直接传递它。