2012年7月11日水曜日

MeteorのHandlebarsで2項比較を試す



Meteorで使用しているHTMLテンプレートエンジンのHandlebars.jsのブロック要素はifを始め、4つ程度しかない。
Helperを登録することにより、独自に追加することができそうなので、2つの数値の大小関係で処理内容を変えようと思い以下のことをした。
foo.html
<head>
<title>原価管理システム</title>
</head>
<body>
{{>mainContent}}
</body>

<template name="mainContent">
{{#ifCond 10 3}} big {{else}} small {{/ifCond}}
</template>

foo.js
if(Meteor.is_client){
Handlebars.registerHelper("ifCond", function(m, n, block){
if(m > n) {
return block();
} else {
return block.inverse();
}
});
}

if(Meteor.is_server){
Meteor.startup(function(){
});
}

bigが表示される。

{{#ifCond 10 3}} big {{else}} small {{/ifCond}}を
{{#ifCond hoge 3}} big {{else}} small {{/ifCond}}に変えて、
if(Meteor.is_client){ の下に
Template.mainContent.hoge = function(){
return 8;
}
を挿入すると、ifCondの3つの引数のmには8が渡ってきているが、nには本来blockに渡って来るべき関数が渡ってきて、blockは未定義となっている。

今度は{{#ifCond hoge}}で、hogeに式を渡すようにする(m > nなど)。


0 件のコメント:

コメントを投稿