Meteor - Coffeescript 助手在与 Jade 位于同一文件夹中时未触发

Meteor - Coffeescript helper not fired when in the same folder as Jade

我开始在我的 Meteor 应用程序上使用 Coffeescript,虽然在包中一切正常,但我在将我的 js 文件模板函数转换为 .coffee 时遇到了一些问题。

尽管 coffeescript 在我编译时似乎是正确的,但在我呈现网页时我的助手和事件似乎没有被触发。我什至在 Web 控制台上都没有收到错误消息。

我进行了搜索,但除了 this thread.

之外找不到任何其他内容

我使用 Jade、Coffeescript,我的 .coffee 和 .jade 文件位于同一个文件夹中,如下所示:

client/templates/myTemplate/myTemplate.玉

client/templates/myTemplate/myTemplate.咖啡

我尝试了 _ 方法,将我的文件重命名为 .html.jade 和 js.coffee,但到目前为止没有任何效果。如果我将计算出的 javascript 放入 myTemplate.js 文件中,一切正常。

有什么想法吗?

下面是代码示例:

Template.loginButton.helpers
    statusText: () ->
        console.log 'anybody there?'
        if Meteor.user() then "Déconnexion" else "Connexion"

Coffeescript 对缩进很敏感。如果您刚开始使用 coffeescript,该站点 js2.coffee 将非常有用。把你的代码粘贴进去,输出如下JS,说明你已经有效地生成了一个no-op:

Template.loginButton.helpers;

({
  statusText: function() {
    console.log('anybody there?');
    if (Meteor.user()) {
      return "Déconnexion";
    } else {
      return "Connexion";
    }
  }
});

另一方面,使用正确的缩进

Template.loginButton.helpers
  statusText: () ->
    console.log 'anybody there?'
    if Meteor.user() then "Déconnexion" else "Connexion"

你得到

Template.loginButton.helpers({
  statusText: function() {
    console.log('anybody there?');
    if (Meteor.user()) {
      return "Déconnexion";
    } else {
      return "Connexion";
    }
  }
});

更新:由于这不是问题,请注意,如果您同时使用第三方模板系统 (jade) 和第三方 JS 转译器 ( coffeescript),您需要先加载模板,然后再加载 JS,以确保您可以从代码中访问模板。因此,无论是在 .meteor/packages(对于应用程序)还是在 package.js(对于程序包)中,确保 jade 位于 coffeescript 之前。

P.S。我一直是咖啡用户,但我正在切换到 ES6,因为它具有咖啡的大部分重要功能,而且没有太多机会搬起石头砸自己的脚。另外,和不懂咖啡的人一起工作是很困难的。

感谢安德鲁,我终于找到了问题所在。 结果我通过 npm 安装了 Coffeescript,当 .coffee 在一个包中时,这并没有造成任何问题,因为它们在任何情况下都按加载顺序排列。 但是当谈到模板和助手时,顺序很重要,我猜 npm coffeescript 库是在 .jade 模板存在之前编译和执行的,导致我的助手没有附加到任何模板。

终于

meteor add coffeescript

并确保在 中将 jade 放在 coffeescript 之前。meteor/packages 成功了。