6

Catalystを使用して Perl で作業しているとします。ハッシュの配列を変数に割り当てます。つまり、次のようにします。

my @array = ($some_hash); 
$c->stash->{foo}->{bar} = \@array;

Template Toolkitで「id」などの $some_hash から要素を選択するにはどうすればよいですか? Perlでは、次の方法でアクセスできます$c->stash->{foo}->{bar}->[0]->id...

すべてのヘルプは大歓迎です。私は少し Perl に慣れていないので、場違いなところがあれば教えてください。前もって感謝します...

4

5 に答える 5

12

Template Toolkitは、複雑な構造の要素にアクセスするために統一された構文を使用します。これはあなたが望むことをするはずです:

[% foo.bar.0.id %]
于 2011-11-10T23:34:40.970 に答える
5

TTの複雑なデータ構造で何が起こっているかを理解したい場合は、次のようなものが役立ちます。

[% USE Dumper; Dumper.dump_html(foo) %]

.. TTがあなたが持っていると考えるデータの種類を確認します。

[% foo %]

...またはウサギの巣のさらに下:

[% FOREACH x IN foo.keys; 
USE Dumper; Dumper.dump_html(foo.$x);
foo.$x ; # to see what kind of ref it is
END %]
于 2011-11-10T23:56:57.177 に答える
2

あなたの例で有名なfoobarメソッド/キーを使用してくれてありがとう。

TT の落とし穴の 1 つは、VMethod 名とハッシュ キーの衝突です。キー名が組み込みの TT VMethod のいずれかと競合する可能性はありますか? .first.last.lengthまたは.keysこれの候補であり、おそらく他にもあります

これは、特に仮想メソッドの動作のためにスカラーのリストへの自動プロモーションを投入する場合に、予期しない結果につながる可能性があります。

item()これに対する解決策は、 VMethodを使用することです。つまり、次のようになります。

[% foo.item("bar").0.id %]
于 2011-11-21T03:37:51.220 に答える
1

perlでアクセスする方法から祝福されているように見えるので$some_hash、次のようなものを試してみます

[% foo.bar.0.id() %]

それが機能するかどうかを確認します。

于 2011-11-14T19:33:22.913 に答える
0

foo既存のコードのどこかに呼び出されたローカル TT 変数を設定した可能性はありますか? それが起こった場合、「これが機能することに同意しますが、機能しません」という行に沿って、いくつかの不思議な結果が得られる可能性があります。

これを確認する 1 つの方法は、次のようにfoo明示的にすることです。

[% c.stash.foo.bar.0.id %]

その結果が得られる場合は、名前空間に問題があります。

于 2011-11-21T03:25:59.633 に答える