0

フィルター内で locales オプションを使用しようとしていますが、フィルターから locale-object にアクセスできないという問題に直面しました。

ロケール: 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 に、このプル リクエストからの変更を反映させます。

4

1 に答える 1

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?

参考までに、次のリンクを参照してください。

アップデート

render を使用したい場合は、ローカル変数を一緒に渡さないでください。あなたがそうするなら:

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>

ビューがローカルであることの欠点は使用できず、直接渡す必要があります。

于 2013-09-18T05:45:22.427 に答える