1

テンプレート

{#person alias=root}{alias.value}: {name}, {age}{/person}

データ:

{
  "root": {value:"MR."},
  "person": {
    "name": "Larry",
    "age": 45
  }
}

期待される出力:

MR. Larry, 45

実際の出力:

: Larry, 45

上記のようにオブジェクトにエイリアスを付けようとしています。しかし、うまくいきません。このフィドルhttp://jsfiddle.net/G86mu/1/を調べてください 。

{value:"MR."}文字列に置き換え て"root":"Mr."、テンプレートを次のように変更すると、

{#person alias=root}{alias}: {name}, {age}{/person}

出力は期待どおりです。オブジェクトにエイリアスを付ける方法を教えてください

4

1 に答える 1

1

これが機能しない理由は、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}
于 2013-06-13T20:46:38.923 に答える