0

テンプレートで 2 つの値を比較したいので、以下のようにハンドルバー ヘルパーを使用しました。

Handlebars.registerHelper('ifCond', function(v1, v2, options) {
    console.log(v1);console.log(v2);
  if(v1 === v2) {
    return options.fn(this);
  }
  return options.inverse(this);
});

私のテンプレートコード:

{{#ifCond item.id 1}}                           
    <div class="row" style="margin-top:0px;">                           
{{else}}
    <div class="row" style="margin-top:5px;">
{{/ifCond}} 

しかし、の値はitem.idヘルパーに渡されず、その値は「item.id」として表示されます。

上記のコードの間違いを誰か教えてもらえますか?

4

1 に答える 1

2

if ステートメントを使用してマークアップを変更することはお勧めしません。私は自分でそれを行いましたが、これは脆弱なアプローチであり、あまり簡潔ではありません。私は常にヘルパーを使用しようとします{{bind-attr}}(ヘルパーは rc7 以降では {{bindAttr}} と呼ばれます)。

CSS:

row.margin-top{
  margin-top: 5px;
}

テンプレート:

<div class="row" {{bindAttr class="item.isWithMargin:margin-top"}}>

モデルに css 固有のロジックがあるため、これは最も洗練されたアプローチではありません。そのため、アイテムを繰り返し処理し、itemController を各アイテムに割り当てて、このコントローラーにロジックを配置できます。

{{#each item in controller itemController="yourItemController"}}
<!-- this would resolve to App.YourItemController -->
App.YourItemController = Ember.ObjectController({
  isWithMargin : function(){
    return this.get("model.id") == 1;
  }.property("model.id")
});
于 2013-09-02T12:13:26.193 に答える