把手有时不会在每个助手中打印{{this}}

时间:2014-07-28 02:54:04

标签: javascript backbone.js requirejs handlebars.js

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

如果你想知道什么是underscoretodash,它是一个简单的帮助,即使我删除它没有任何不同。

我的应用程序使用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;
  }"

2 个答案:

答案 0 :(得分:3)

确定{{this}}的类型似乎是HB的错误。

解决方法是,您可以更改

{{this}}

{{./this}}

答案 1 :(得分:0)

我猜{{this}}取决于`toString&#39;给定对象的输出。为stringfiy添加一个帮助器并尝试{{stringify this}}。它可能会给你更多的见解。