Statements:
(1) Variable Declaration
Syntax | Example |
{var variable} {var variable = value} | {var price} {var price = 10} |
(2) Control Flow
Syntax | Example: |
{if expression} {elseif expression} ... {else} ... {/if} | {if price > 10} {elseif price <20}... {else}... {/if} |
(3) Loop
Syntax | Example |
{for varariable in list} statements go here {/for} | {for price in pricelist} ${alert(price)} {/for} |
(4) Expression
Syntax | Example |
${expression} | ${car.brand} |
${expression|modifier} | ${car.brand|capitalize} |
${expression|modifier1|modifer2} | ${car.brand|default:"chevy"|capitalize} |
... | ... |
Value of the expression will be returned.
Note:
Statement for( ; ; ) is not supported.
These statements are parsed and processed by Javascript Template Library instead of javascript itself.
More:
(5) CDATA Text. Tag is cdata.
CDATA Text will be ignored and will not be processed.
(6) In-line javascript block. Tag is eval.
Multiple line javascript code can be put in a single block to evaluate.
(7) If you have multiple-line js code, you can use minify to tell processor to treat them as a whole.
For example:
<input type="button" onClick="{minify} Javascript event
handling code...
{/minify}">
Note: eval and minify are different althought they are sort of similar.
How to process templates?
API: http://code.google.com/p/trimpath/wiki/JavaScriptTemplateAPI.
Commonly used functions:
(1) TrimPath.parseDOMTemplate ( elementId, contextObject )
This function retrieves content of the element corresponding to the first parameter. It should be a textarea element and its should be hidden.
The second parameter is a context object and it will be "merged" with the template. For example, if a template refers to ${car}, then the processor tries to access contextObject.car.
(2) TrimPath.parseTemplate ( templateContentStr )
This function accepts a string as template instead of a dom element id.
You can parse a string template in this way:
TrimPath.parseTemplate( stringvariable ).process( contextObject ).
Variable Resolvation Precedence:
There are three kinds of scopes:
(1) Processor scope: it consists of all template statements.
(2) Context object scope: All properties of the context object.
(3) Local scope: local variables whic are not defined in template.
Case 1: In template expression and {eval}:
Processor scope is checked first, then context object is checked. At alst, local scope is checked.
For example:
var data={car : "chevy"};
var str = '${alert(car)}';
str.process(data); //alert "chevy"
var str2 = '{var car = "ford"} ${alert(car)}''
str2.process(data); //alert "ford"
var car = "toyota";
var str3 = '${alert(car)}';
str3.process(); //alert "toyota"
Case 2: All variables defined in template do not have effect in local scope.
For example:
var str = '{var car="chevy"}${alert(car)}';
str.process(data); //alert "chevy"
alert(car); //variable 'car' is not defined.
No comments:
Post a Comment