【问题标题】:Handlebars sometimes not print {{this}} in each helper车把有时不会在每个助手中打印 {{this}}
【发布时间】:2014-07-28 02:54:04
【问题描述】:

我迭代一个对象并尝试打印对象的值,有时它可以工作,有时它不能。这主要发生在 Chrome 和 Firefox 中,IE9 正常工作。 不知何故,车把生成的功能在工作时和不工作时会有所不同。两次的数据都是一样的。当我使用日志助手打印 {{this}} 时,我可以在控制台中看到正确的值打印。

如果您想知道什么是下划线,它是一个简单的助手,即使我删除它也没有任何不同。

我的应用程序使用 Backbone、Marionette、Handlebars 和 requireJs。

如果有人遇到这样的问题或知道如何解决这个问题,那将非常有帮助。

数据结构如下

var errors = {
            "custom_agent": "You can't be an agent.",
            "min_length": "Occupation must be at least 2 characters."
        };

车把代码如下

{{#each error_messages}}
  <span class="error-{{format @key "underscoretodash"}}">{{this}} {{log this}}</span>
{{/each}}

Handlebar 生成功能如下。

什么时候工作。

*** "Invalid Branch." handlebars.js:469
*** prog: "function program8(depth0,data) {

  var buffer = "", helper, options;
  buffer += "\n                    <span class=\"error-"
    + escapeExpression((helper = helpers.format || (depth0 && depth0.format),options={hash:{},data:data},helper ? helper.call(depth0, (data == null || data === false ? data : data.key), "underscoretodash", options) : helperMissing.call(depth0, "format", (data == null || data === false ? data : data.key), "underscoretodash", options)))
    + "\">"
    + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))
    + "</span>\n                ";
  return buffer;
  }" 

什么时候不工作

*** "Invalid Branch." handlebars.js:468
*** prog: "function program8(depth0,data) {

  var buffer = "", stack1, helper, options;
  buffer += "\n                    <span class=\"error-"
    + escapeExpression((helper = helpers.format || (depth0 && depth0.format),options={hash:{},data:data},helper ? helper.call(depth0, (data == null || data === false ? data : data.key), "underscoretodash", options) : helperMissing.call(depth0, "format", (data == null || data === false ? data : data.key), "underscoretodash", options)))
    + "\">";
  if (helper = helpers.undefined) { stack1 = helper.call(depth0, {hash:{},data:data}); }
  else { helper = (depth0 && depth0.undefined); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }
  buffer += escapeExpression(stack1)
    + "</span>\n                ";
  return buffer;
  }"

【问题讨论】:

  • 我已将 HB 版本更新为 2.0 (alpha),看看这是否能解决我的问题。现在有时从quotedString: function(str) { in line 2761 str变得未定义。
  • 我在一个简单的小提琴中重新创建了这个问题。 link 在 Chrome 版本 36 中测试

标签: javascript backbone.js requirejs handlebars.js


【解决方案1】:

判断 {{this}} 的类型似乎是 HB 的错误。

解决方法是,您可以更改

{{this}}

{{./this}}

【讨论】:

    【解决方案2】:

    我猜{{this}} 取决于给定对象的“toString”输出。为 stringfiy 添加一个助手并尝试 {{stringify this}}。它可能会给你更多的见解。

    【讨论】:

      猜你喜欢
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      相关资源
      最近更新 更多