【问题标题】:Hanlebars Each Helper ContextHandlebars 每个 Helper 上下文
【发布时间】:2014-09-30 14:22:58
【问题描述】:

我正在尝试在以下模板代码块中使用每个迭代器的把手:

<table>
    <tr><th></th><th>Today</th><th>This Month<br>(To Date)</th><th>Last Month</th></tr>
    {{#each Activities}}
        {{examineObject this}} - first -
        <tr><td>{{examineObject this}}</td>
        <td>{{Today}}</td>
        <td>{{ThisMonth}}</td>
        <td>{{LastMonth}}</td></tr>
        {{examineObject this}} - third - 
    {{/each}}
    <tr class='total'><td>Net Change</td>
        <td>{{Totals.Today}}</td>
        <td>{{Totals.ThisMonth}}</td>
        <td>{{Totals.LastMonth}}</td></tr>
</table>

examineObject 是我编写的车把助手,只需在变量上调用JSON.stringify()。我这样做是为了评估上下文。助手很简单:

examineObject: function(object){
    return JSON.stringify(object);
}

当我编译和渲染上面的模板时,发生了一些非常奇怪的事情。第一次和第三次examineObject 调用中this 的上下文是each 迭代器选择的单个activity。但是,第二个examineObject 调用中的this 的上下文(由html 标签包围)是整个模板的上下文- 不是 由@987654333 选择的单个activity 的上下文@迭代器。谁能解释为什么会这样?

【问题讨论】:

  • 请同时为您的助手发布代码。
  • 这不是helper的问题,因为即使我不使用helper进行测试,上下文也很混乱。不过,我已经发布了帮助程序。
  • 你是这样设置的吗?为我工作:jsfiddle.net/gfullam/5rbpja10
  • 不,我使用的是 each 迭代器,而不是 with 迭代器,而且我在 HTML 表中进行操作,而不是 ol。我认为我的问题已缩小到表格本身,因为它适用于我测试过的大多数其他类型的 HTML 元素。
  • 再次检查小提琴。一开始我发错链接了

标签: each handlebars.js


【解决方案1】:

不要使用 jQuery 的 .find() 来获取您的车把模板,因为它会抓取渲染的 DOM,这可能与您编写的文件内容不同。

试试loading your template file asynchronously

更新:

或者,如果您有大量模板并且不想运行大量异步请求,您可能对 precompiling the handlebars templates 感兴趣,如“Handling handlebars.js like a pro”所示。

【讨论】:

  • 我知道您来自哪里,但出于资源目的,我宁愿不要在每次页面加载时进行 10 次或更多异步调用以获取所有模板。现在,我使用 require.js 将调用保持在最低限度。我会进一步考虑这个问题以及是否有其他好的选择。
猜你喜欢
  • 2013-07-13
  • 2022-06-22
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
相关资源
最近更新 更多