在 jade 筛选器中使用区域设置选项失败

Using locales options inside the jade filter failed

本文关键字:区域 设置 选项 失败 jade 筛选      更新时间:2023-09-26

>我正在尝试在过滤器中使用语言环境选项,但遇到了问题,无法从过滤器访问该语言环境对象。

地区: 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 您可以查看此存储库中的代码 — 我正在使用 grunt 和 grunt-contrib-jade 插件,但要强制 grunt-contrib-jade

使用过滤器,您应该编辑 ./node_modules/grunt-contrib-jade/tasks/jade.js 以反映此拉取请求的更改。

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

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"}));

这里提到了同样的问题:在node.js中,如何将变量从jade传递给:stylus过滤器?

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

  • 翡翠:传递降价过滤变量。
  • :markdown 过滤器处理字符串变量的文本
  • :带变量的降价

[更新]

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

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>

缺点是您的视图本地无法使用,您必须直接传递它。