4

我一直在尝试获得一个看似简单的 Handlebars 助手,以便如果元素的 ID 与所选元素的 ID 匹配,我可以在 {{each}} 块中将元素标记为活动。

这是使用我在网上找到的一些帮手的一次尝试。

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 或其他东西之前,让我问我的实际问题:在这种情况下,ember 中的把手助手是否损坏?我的助手期待一个值,它得到一个字符串。这是预期的行为吗?

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 回答