【问题标题】:how to display static html files using iron router如何使用 Iron 路由器显示静态 html 文件
【发布时间】:2015-06-07 16:53:29
【问题描述】:

我想使用 Iron Router 渲染普通的 html 文件。但是当我尝试这样做时,它会显示其他模板而不是我使用 Iron Router 附加的模板。

这是我的主要布局

<template name="mainLayout">

{{> yield region="navBar"}}

{{> yield}}

{{> yield region="footer"}}

</template>

这就是我的 router.js 文件的样子

Router.route('/',{
  name: 'root',
  controller: 'MainPageController'
});
Router.route("/:_id",{
  name: 'signlePost',
  controller: 'singlePostController'
});

Router.route("/about", function(){
  this.render("aboutUs")
});

这是我要渲染的模板

<template name="aboutUs">
  <p>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </p> 
</template>

然而,它没有渲染适当的 aboutUs 页面,而是在 aboutUs 页面上再次渲染 singlePost 模板。请帮忙

【问题讨论】:

    标签: javascript meteor meteor-helper


    【解决方案1】:

    我不确定这是最好的方法,但这应该可以解决这个问题。

    1. 为您的 html 文件创建一个控制器 about_us_controller.js

      this.AboutController = RouteController.extend({
      template: "aboutUs",
      action: function() {
         this.render();
      }
      });
      
    2. 在你的router.js声明它

      Router.map ( function () {

      this.route("aboutUs", {path: "/about", controller: "AboutController"});

      //add all the other routes });

    ps:我无法正确显示代码,抱歉

    1. 您现在可以使用{{pathFor 'aboutUs'}} 等链接访问您的“aboutUs”模板,例如链接href 属性

    【讨论】:

    • 也许地图功能有点矫枉过正。只需在您的router.js 中使用Router.route("/about", { name: 'aboutUs', controller: 'AboutController '});
    • 我也试过了,但它不起作用。我不明白为什么
    • 它仍然在做同样的事情。仍然产生该 singlePost 模板而不是 aboutUs 模板。
    【解决方案2】:

    切换路由声明的顺序,因为您signlePost 路由模式也匹配“/about”。

    Router.route("/about", function(){
        this.render("aboutUs")
    });
    Router.route("/:_id",{
        name: 'signlePost',
        controller: 'singlePostController'
    });
    

    【讨论】:

    • 感谢工作,但还有另一个问题。当我试图将它连接到我的 BaseController 时,它显示错误,它包含 mainLayout 模板,即在 base.js 中我有 BaseController = RouteController.extend({ layoutTemplate : 'mainLayout' }); 和 about_us.js AboutController = BaseController.extend({ template: "aboutUs" }); 并且它显示参考错误 BaseController 未定义但它正在使用我拥有的其他控制器,例如 PostController
    • 文件按字母顺序排列。您可以将您的 base.js 重命名为 0base.js 并尝试吗?
    • 我太傻了。非常感谢。但是建议这样命名吗?
    • 由于文件按字母顺序包含,如果同一文件夹中的不同文件引用特定变量,理想情况下,您应该在其前面加上一个数字,以便首先包含该文件。我不太确定是否推荐,但这是一个很好的解决方案。
    • 这是一个常规的解决方法。如果您想让它更漂亮,请将其命名为 0_base 并将编号应用于其他文件。您应该验证@kaoskeya 的答案。
    猜你喜欢
    • 2021-09-07
    • 2018-12-23
    • 2014-07-24
    • 2013-08-14
    • 1970-01-01
    • 2022-11-13
    • 2016-06-03
    • 2016-02-26
    • 1970-01-01
    相关资源
    最近更新 更多