2016-05-21 4 views
0

Wenn ich Text verwenden :: Xslate Template-Engine und sammeln Daten, die auf die Vorlage in Perl-Skript geliefert wird, funktioniert alles einwandfrei und wie erwartet:Zuordnung innerhalb Text :: Xslate Vorlage TTerse Syntax

my %vars = (
    some => { 
     nested => { 
      thing => 'foobar', 
     }, 
    }, 
); 

# template.tx contains [% some.nested.thing %] 
my $content = $tx->render('template.tx', \%vars); 

Wie erwartet, wurde [% some.nested.thing %] durch "foobar" ersetzt. Wenn ich zuweisen auf diese Weise innerhalb Vorlage:

[% some_nested_thing = 'foobar' %]

alles in Ordnung, gut funktioniert. Aber, wenn ich versuche, auf diese Weise zu vergeben:

[% some.nested.thing = 'foobar' %]

es mit dieser Meldung fehlschlägt: Text::Xslate::Compiler: Cannot modify ., which is not a lexical variable.

Also, ist es sogar in Text :: Xslate möglich, innerhalb Vorlagen so zu vergeben?


Es ist bemerkenswert, dass mehrdimensionale Hashes können noch innerhalb Text erstellt werden :: Xslate Vorlagen:

[% some = { 
    nested => { 
     thing => 'foobar', 
    } 
} %] 

und dann Elemente in es kann wie [% some.nested.thing %] referenziert werden.

Antwort

2

Nein, es ist nicht möglich, wie das, und wenn Sie the MVC paper die manuellen Links zu lesen Sie werden sehen, warum dies ein explizites Designziel war. Das Zurückgeben von Daten von der Ansicht an den Controller sollte ein großes No-No sein. Sie könnten immer daran arbeiten, indem Sie eine benutzerdefinierte Funktion definieren, mit der Sie aus der Vorlage heraus zu Perl zurückrufen können, aber denken Sie zweimal darüber nach, ob Sie wirklich einen solchen Hack wollen.

2

The manual spricht nur über das Erstellen und Zuweisen neuer Variablen, nicht vorhandenen. Es rät sogar davon ab, diese Funktion überhaupt zu benutzen.

SET und Zuweisungen, obwohl die Verwendung von ihnen sind stark abgeraten.

[% SET var1 = expr1, var2 = expr2 %] 
[% var = expr %] 
Verwandte Themen