【问题标题】:Iron Router Couldn't find a template named "layout" or "layout"Iron Router 找不到名为“layout”或“layout”的模板
【发布时间】:2017-08-27 09:43:11
【问题描述】:

在转换到 Meteor 的新文件结构后,一整天都出现奇怪的错误。 Iron-router似乎坏了。

我确实有 layout.html 和 js 文件。名称也使用正确的小写。

完整的错误:

找不到名为“layout”或“layout”的模板。你确定你 定义了吗?

我的文件是:

  • client/main.html 和 main.js --> <head></head> 在这里定义

  • import/ui/layouts --> 包含 layout.html 和 layout.js <body></body> 在这里定义。

  • 导入/启动/两者 --> 包含 router.js

路由器文件:

Router.configure({
   layoutTemplate    : 'layout',
   loadingTemplate   : 'loading',
   notFoundTemplate  : 'notFound',
   waitOn: function() {
      return [
         Meteor.subscribe('allUsers'),
         Meteor.subscribe('otherUser')
      ];
   }
});

Router.route('/',{ 
  name: 'home',
   onBeforeAction: function () {
      if( Meteor.userId() ){ 
         Router.go('/new'); 
      } else {
         this.next();
      }
   }
});

当我 console.log typeof(Template.layout) 时,它返回未定义。

因此,当我将 layout.htmllayout.js 连同 main.html 一起移动到客户端文件夹时...错误消失但仍然显示空白页,但给出了一个名为“设置”的页面丢失的错误(但是settings.html和js文件都存在于import/ui/pages中。但是上面的console.log返回了一个对象。奇怪。

PS:附注

我在服务器文件夹的 main.js 文件中尝试了 import '/imports/startup/client'; 以使上述 html 工作。我得到了'Error: Cannot find module '/imports/startup/client'。所以我只是先将其注释掉以解决上述问题。

我还在客户端 main.js 中添加了import '../imports/ui/layouts/layout.html';import '../imports/ui/pages';。但是错误显示Cannot find module '../imports/ui/pages' 并且系统仍然看不到设置。

任何人都可以对此有所了解吗?谢谢!

【问题讨论】:

    标签: meteor meteor-blaze


    【解决方案1】:

    将您的 blaze html 文件留在/client - html 文件不能按原样导入。您的 js 文件可以迁移到 imports 目录结构,但是您必须从每个文件中导出函数,然后将它们导入到您需要使用它们的地方。就我个人而言,我不确定将 blaze 项目迁移到新结构是否值得,如果您使用 react 会更有用。

    【讨论】:

    • 在给出的示例中,Meteor 提到导入有启动,ui...其中 ui 有单独的页面。那么这纯粹是针对 js 和 jsx 的吗?由客户端...是仅限于客户端主文件夹还是导入/启动/客户端?
    • react中只有真正的js/jsx和css文件,都可以导入。 html 文件并没有真正使用。 /client 或其子目录下的文件会自动缩小、捆绑并发送到客户端,但 imports 下的任何内容都不会发送到客户端,除非它被导入。通常/client/main.js 执行第一次导入,然后它导入的文件导入其他文件等等。
    【解决方案2】:

    这就是我在路由器文件中的做法:

    import '../../ui/layouts/mainlayout.js';
    

    您不必将 html 文件放在客户端文件夹中。我将我的放在导入中,并使用通用页面在 page.js 中执行此操作:

    import ./page.html 然后是我的其余代码。

    【讨论】:

      猜你喜欢
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多