【问题标题】:Why this works: Meteor-Blaze #with and data context?为什么会这样:Meteor-Blaze #with 和数据上下文?
【发布时间】:2015-06-20 09:28:49
【问题描述】:

我想知道为什么下面的东西输出'hello'而不是'bye'???

模板:

<template name="example">
    {{#with dataContext}}
        {{say}}
    {{/with}}
</template>

模板助手:

Template.example.helpers({
    dataContext: function() {
        return {
            say: 'bye'
        };
    },
    say: function() {
        return 'hello';
    }
});

(流星 1.1.0.2)

【问题讨论】:

  • 尝试将 {{say}} 替换为 {{dataContext}}
  • 是的,谢谢,但我问为什么它仍然有效? - 只是为了好奇。
  • 你说如果数据上下文 == 真,然后为“说”呈现结果。现在,我说 IF 数据上下文 == true,然后为“数据上下文”渲染结果。 dataContext 将始终在 if 语句中返回 true,除非您指定返回 false。你可以写 {{#with say}} {{datacontext}} {{/with}} 你的输出会是“再见”。
  • 我不明白 - 我问自己为什么它像它一样有效。据我了解,我的示例应该输出“再见”,因为数据上下文集对“再见”说。但是目前在数据上下文中说是由模板助手设置的说......这对我来说在概念上是错误的。

标签: meteor meteor-blaze


【解决方案1】:

对此的最短答案是助手优先于数据上下文。

如果您将其中一个重命名为其他名称,它应该可以解决您的问题。

查找的顺序是:

  1. 数据上下文(如果它包含.)。 {{say}} 没有。
  2. 模板的助手。 {{say}} 有一个say 的助手。
  3. 一个模板
  4. 全局助手,例如使用Template.registerHelper 定义的助手。
  5. 数据上下文

所以如果第一个没有找到,它会沿着列表向下直到找到东西

[1]https://github.com/meteor/meteor/blob/90b356061ff2464f11749dc8b43d1a139b233980/packages/blaze/lookup.js#L100-L139

【讨论】:

  • 非常简单的解释。我从来没有真正将其视为偏好顺序 - 总是有更多选择,但你是对的,有一个带有上下文的层次结构系统。
猜你喜欢
  • 2018-11-05
  • 2018-08-26
  • 2016-05-02
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 2016-03-10
  • 1970-01-01
相关资源
最近更新 更多