2

テンプレートツールキットで奇妙な動作が発生しています。たとえば、データ構造(perlで定義され、パラメーターとして渡されたもの)があるとします。

( { FLAG => 1, some => data}, { some => data}, etc )

テンプレートには次のようなループがあります

[FOR ITEMS]
  [IF (FLAG) ]
    do something
  [ELSE]
    do something else
  [END]
[END]

テンプレートがelseを入力することはないようです。テンプレートをelseに入力させる唯一の方法は、データを変更することです。

( { FLAG => 1, some => data}, { FLAG => 0, some => data}, etc )

falseと評価されるようにします。ただし、データ構造を次のように変更すると、

( { some => data}, { some => data}, etc )

常にelseに入ります(undefがfalseと評価されるため)。

上書きされない限り、次の反復のスコープに残っている変数の「ブリードオーバー」があるように見えますが、これは予想される動作ですか?もしそうなら、それはどこかに文書化されていますか?

編集:後で、上記の動作を引き起こす別の問題であることがわかりました。これは、テンプレートの他の場所で正しい「ELSIF」ではなく「ELSEIF」を使用したことが原因でした。疑わしい場合は、元の投稿で説明した問題を解決したjiraによって提案された解決策を確認してください。

4

1 に答える 1

4

ループ変数を名前付きハッシュに割り当てる以下のように、テンプレートを変更できます。その後、期待どおりに動作します。

[%FOREACH ITEM IN ITEMS%]

  [%IF ITEM.FLAG %]
    do something
  [%ELSE%]
    do something else
  [%END%]

[%END%]
于 2010-12-01T21:48:07.223 に答える