これが機能しない理由は、Dust 内のコンテキストが に渡す JSON と同じではないためdust.render
です。内部的に、Dust は JSON をラップして、コンテキストに params、global、および blocks を含めることができるようにします。
したがって、ご想像のとおりalias
、現在のコンテキストに追加していません。alias
代わりに、現在のコンテキストの上に 1 レベル追加しています。表現は正確ではありませんが、説明の目的には役立つはずです。
// Incorrect:
{
"root": {
"value": "MR."
},
"person": {
// Current context
"alias": {
"value": "MR."
},
"name": "Larry",
"age": "45"
}
}
// (more) correct:
{
"root": {
"value": "MR."
},
"alias": {
"value": "MR."
"person": {
// Current context
"name": "Larry",
"age": "45"
}
}
}
このように文脈を見ると、{#person alias=root}{alias.value}: {name}, {age}{/person}
うまくいかない理由がよくわかります。参照内でドット表記を使用する場合 ( のように{alias.value}
、ダストは現在のコンテキストで開始され、下降します。現在のコンテキスト内に「エイリアス」オブジェクトがないため、ダストは放棄され、空の文字列が得られます。
ただし、ドット表記を使用しない場合、dust は現在のコンテキストから開始して検索します。一致が初めて見つかったときに、その一致が使用されます。したがって、あなたの例では、次を使用して期待される出力を取得できます。
{#person alias=root}{#alias}{value}{/alias}: {name}, {age}{/person}
または、次を使用できる場合:
{#person aliasVal=root.value}{aliasVal}: {name}, {age}{/person}