【问题标题】:meteor helper functions, lambdas and lexical this流星辅助函数,lambdas 和词法 this
【发布时间】:2016-02-19 20:05:43
【问题描述】:

生日, 我读到流星正在使用所有 ecmascript 6 - 并认为太棒了......“我再也不用写'函数'了” - 很快将一堆函数更改为 lambdas ......只是发现它不起作用:(

如果你在meteor中编写一个辅助函数——你会在“this”属性中获得数据上下文——当然,lambdas使用词法this——所以我很容易理解这个问题。

问题是 - 对我来说不明显的是解决方案 - 知道如何使用 () => 符号创建需要当前数据上下文的辅助函数吗?除了“这个”,它似乎没有其他地方生活过?

【问题讨论】:

    标签: javascript meteor lambda ecmascript-6


    【解决方案1】:

    使用简写将函数定义为对象属性:

    Template.someTemplate.helpers({
      someHelper() {
        console.log(this);
      }
    });
    

    但如果你真的想使用() => 语法,你可能有兴趣使用Template.currentData() 而不是this

    Template.someTemplate.helpers({
      someHelper: () => {
        console.log(Template.currentData());
      }
    });
    

    来自documentation

    Template.currentData()

    在帮助器中,返回 DOM 节点的数据上下文,其中 使用了助手。

    【讨论】:

    • 太棒了 - 谢谢!会试一试。 “function”关键字是我最不喜欢 javascript 的地方 - 所以将它完全从我的生活中剔除是我的首要目标 :)
    【解决方案2】:

    ECMAScript 2015 并未弃用 function()。箭头函数不是简写语法,它们具有不同的语义,最值得注意的是,词法this 绑定。

    您不能在箭头函数中使用上下文 this - 请改用标准函数。

    【讨论】:

    • 因为问题是“给定词汇 this,你如何让流星工作” - 而你说“它不能工作,因为词汇 this”。另一个答案完美解决了这个问题。
    • @DarrenOakey - 您在此处的评论中表达问题的方式比您在帖子本身中使用的方式更清晰,但您是正确的 - 我现在可以看到这就是您的意思。考虑到这一点,您对我的回答(“它行不通...”)的解释是错误。我的回答是你不应该仅仅因为引入了箭头函数就停止使用function()。这是两个非常相似但不相同的表达方式,并且都各有利弊。我同意你的观点,我的回答不是特定于流星的,但我希望你能同意我的观点,它的相关性或正确性同样不低。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2016-05-09
    • 2014-01-23
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    相关资源
    最近更新 更多