我正在尝试在过滤器中使用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。
答案 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>
作为您的观点的缺点是本地不能使用,您必须直接传递它。