4

選択したIDとIDが一致する場合に、要素を{{each}}ブロックでアクティブとしてマークできるように、一見単純なハンドルバーヘルパーを配置しようとしています。

これが私がオンラインで見つけたヘルパーを使った1つの試みです。

Handlebars.registerHelper('ifequal', function (val1, val2, fn, elseFn) {
    console.log(val1);
  console.log(val2);
  if (val1 === val2) {
    return fn();
  } else if (elseFn) {
    return elseFn();
  }
});

私の友人はまた、より多くの「ハンドルバーウェイ」の試みのためのフィドルを持っています。

したがって、すべての人が私の要素をビューでラップしてdidInsertElementなどを使用するように指示する前に、実際の質問をさせてください。この場合、残り火のハンドルバーヘルパーは壊れていますか?私のヘルパーは値を期待していて、文字列を取得しています。それは期待される動作ですか?

4

2 に答える 2

2

これは通常の動作のようですが、

次のようなことを試すことができます:

var getPath = Ember.Handlebars.getPath;
Handlebars.registerHelper('ifequal', function (val1, val2, options) {
  var context = (options.fn.contexts && options.fn.contexts[0]) || this;
  var val1 = getPath(context, val1, options.fn);
  var val2 = getPath(context, val2, options.fn);
  console.log(val1);
  console.log(val2);
  if (val1 === val2) {
    return options.fn(this);
  } else{
    return options.inverse(this);
  }
});

フィドル: http: //jsfiddle.net/73wtf/28/

Ref1:https ://github.com/emberjs/ember.js/blob/master/packages/ember-handlebars/lib/helpers/debug.js Ref2: http: //handlebarsjs.com/block_helpers.html

于 2012-08-29T20:13:36.863 に答える
0

ではregisterHelper、実際の値の代わりにバインディング文字列を関数に渡します。したがってgetPath、実際の値を取得するために使用できます。とにかく、私はこの振る舞いが「不自然」に見えることに同意します。バインディング文字列を使用する理由は、自動更新を機能させるためだと思います。

于 2012-08-31T21:32:55.387 に答える