1

Ember.js ArrayController と、次のようなハンドルバー コードがあります。

<p>{{length}} {{pluralize length "thing"}}</p>

次に、次のようなハンドルバーヘルパーがあります

Handlebars.registerHelper('pluralize', function(count, str){
    debugger;
    return (count > 1 ? str+"s" : str);
  }
); 

デバッガーが壊れると、count = 'length'期待したような数値ではないことがわかります。

それで、何が得られますか?私の明白な仕事を達成する正しい方法は何ですか。

4

3 に答える 3

5

ここで働くフィドル。http://jsfiddle.net/MwTuw/2/

トリックは、Ember.registerBoundHelperすべての関連データを関数への最終引数として渡す which を使用することです。

Ember.Handlebars.registerBoundHelper('pluralize', function (count) {
  var options = Array.prototype.pop.call(arguments);
  var string = options.data.properties[1];
  return (count > 1 ? string+"s" : string);
});

これにより{{if controller.length}}、他のソリューションで必要なハックが削除され、追加のオブジェクトを追加または削除すると、それに応じて値が更新されます。

于 2013-05-15T22:49:24.747 に答える
1

Ember.registerBoundHelperを使用すると、テンプレート内のすべてのキーと値のペアが、ヘルパーの 2 番目のパラメーターでハッシュとして利用できるようになります。

ハンドルバー テンプレート:

{{orderShow dataOrderBy key1="value1" key2="value2" ... keyN="valueN"}}

Javascript:

Ember.Handlebars.registerBoundHelper('orderShow', function(order, options) {
  if(options) {
    for(var prop in options.hash) {
            alert(prop + '="' + options.hash[prop] + '"')
    }
  }

  return order;
}

この動作については、次のページの最後に説明があります: http://handlebarsjs.com/expressions.html

于 2013-07-30T20:23:20.347 に答える