【问题标题】:Handlebars: Using Parent Variable as a Parameter to a Custom Helper Wrapped in an Each BlockHandlebars:使用父变量作为包装在 Each 块中的自定义助手的参数
【发布时间】:2018-01-03 02:03:18
【问题描述】:

查看下面的 ../billerId。如果我将 {{ billerId }} 放在 {{# each }} 块之前,我可以看到 billerId 在那里并已定义。

我想在我的自定义助手中使用 billerId 来查看是否应该预先选择选项的值。

<select class="searchbar-control col-6 form-control" id="searchbar-select-biller" style="display:none">
    <option value=''>Select a biller...</option>
    {{# each billers }}
        <option value='{{ _id }}' {{ ifEqual _id ../billerId "selected" "" }} >{{ name }}</option>
    {{/ each }}
</select>

这里是帮助代码:

ifEqual: function (obj, value, trueString, falseString) {
   return ( (obj===value) ? trueString : falseString );
},

我尝试了各种语法:billerId、../billerId、../../billerId、{{ billerId }}。

运气不好。

【问题讨论】:

  • Handlebars确实支持访问父上下文中的属性。 ../billerId 应该可以工作。您确定问题出在../billerId 上吗?我建议在选项文本中使用它以确保,即,将{{ name }} 替换为{{ ../billerId }} - 只是为了调试。
  • 在我发布问题之前我就是这么做的。它不起作用。它单独工作,用大括号括起来 - 即 {{ ../billerId }},但在没有大括号的情况下使用时不起作用。帮助器中的参数不包括大括号。
  • 见:jsfiddle.net/76484/s17s20vv。它工作得很好。如果您没有得到您期望的结果,我怀疑问题是objvalue 的类型不相等。即,一个是字符串,另一个是数字。
  • 我们不是在不到两周前讨论过这个确切的问题吗:stackoverflow.com/q/47916150/3397771
  • 这不是 Handlebars,而是您实现数据和助手的方式。只需更新您的帮助器(或创建一个新的)来进行丢失相等比较:return obj == value ? trueString : falseString;。见:developer.mozilla.org/en-US/docs/Web/JavaScript/…

标签: handlebars.js


【解决方案1】:

不完全是一个答案,但在研究中,我认为 Handlebars 不允许这种类型的使用。

相反,我将 billerId 放在一个隐藏的 span 中,并在 javascript 中通过其 id 引用 span。我从脚本中分配了“选定”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2013-08-03
    • 2013-06-27
    • 2012-11-19
    • 2014-01-08
    • 1970-01-01
    • 2016-06-09
    • 2014-09-17
    相关资源
    最近更新 更多