【问题标题】:Why Does Using {{@...}} In a Meteor Template Cause Errors?为什么在 Meteor 模板中使用 {{@...}} 会导致错误?
【发布时间】:2013-06-22 14:45:39
【问题描述】:

用一个简单的代码

{{#each array}}
{{@index}}: {{this}}
{{/each}}

出现大量错误。对于对象,{{@key}} 也会发生同样的情况。为什么会这样?

【问题讨论】:

    标签: javascript meteor handlebars.js spacebars


    【解决方案1】:

    查看源代码(https://github.com/meteor/meteor/blob/master/packages/handlebars/parse.js):看起来与 Meteor 打包的 Handlebars 版本不支持 {{@ ..}} 表达式集。

    【讨论】:

    • 谢谢,不知道。
    【解决方案2】:

    这对我来说绝对是一种挫败感。与此同时,我制作了一个车把助手来将任何内容解析为命名的“键”和“值”对象:

    Handlebars.registerHelper('key_value', function(context, options) {
      var result = [];
      _.each(context, function(value, key, list){
        result.push({key:key, value:value});
      })
      return result;
    });
    

    这将与#each 运算符一起使用,例如:

    <dl class="attributes">
      {{#each key_value attributes}}
        <dt>{{key}}</dt><dd>{{value}}</dd>
      {{/each}}
    </dl>
    

    (我也刚刚将这个发布到相关的Using @index in meteor #each iterator doesn't work

    【讨论】:

    • 更简洁的实现是使用_.map 而不是_.each: return _.map(context, function(value, key) { return {key: key, value: value}; });
    • 但是请注意,您的解决方法会显着影响应用程序的渲染性能。每当更改任何单个项目时,都会重新渲染每个项目。对于大型集合来说,这可能是个问题。
    • 啊,是的——这绝对是一个好点。我认为 Meteor 将在以后的版本中解决这个问题。他们的新 UI 演示描述了更好的标记管理。希望它将包括键/值类型列表。
    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多