【问题标题】:Iron Router Not Rendering Template in YieldIron Router 没有在 Yield 中渲染模板
【发布时间】:2015-03-06 01:17:35
【问题描述】:

所以我喜欢 Meteor,但 Iron Router 有几个问题。这次似乎我无法让 Iron Router 将模板渲染到屈服区域。最初一切都很好,但是当我点击一个链接回家时({{pathFor ...}} URL 发生了变化,但视图中没有任何变化。这很奇怪,因为我已经检查过它正在调用路由并且我已明确编写并测试 this.render('...') 以尝试强制它呈现我想要的模板(这不起作用)。此外,一旦使用更改的 URL 重新加载页面,它就会正确呈现(即呈现主页)。任何帮助将不胜感激。谢谢!

这里是 router.js(更新):

Router.configure({
  layoutTemplate: 'layout',
  loadingTemplate: 'loading'
});
//Basic Routes
Router.route('/',function(){
  this.render('main');
},{name:"main"});
Router.route('/Board',function(){
  this.render('board');
},{name:"board"});
Router.route('/Board/:chat',function(){
  this.render('board');
},{name:"board.chat"});
//On before actions
var OnBeforeActions = {
    loginRequired: function(){
      if(!Meteor.userId()) {
        this.render('main');
      }else{
        this.next();
      }
    },
    mobileOrDesktop: function(){
      if(findBootstrapEnvironment() != 'xs'){
        this.render('chat',{to:'chat'});
      }else{
        this.render('chat');
      }
      this.next();
    }
};
Router.onBeforeAction(OnBeforeActions.mobileOrDesktop, {
    only: ['board','board.chat']
});
Router.onBeforeAction(OnBeforeActions.loginRequired, {
    only: ['board','board.chat']
});
Router.onBeforeAction('loading');
//Bootstrap state helper
function findBootstrapEnvironment() {
    var envs = ["xs", "sm", "md", "lg"],    
        doc = window.document,
        temp = doc.createElement("div");
    doc.body.appendChild(temp);
    for (var i = envs.length - 1; i >= 0; i--) {
        var env = envs[i];
        temp.className = "hidden-" + env;
        if (temp.offsetParent === null) {
            doc.body.removeChild(temp);
            return env;
        }
    }
    return "";
}

这是我的布局,产量是:

<template name="layout">
    <!--Desktop-->
    <div class="hidden-xs full-height">
        {{> navbar}}
        {{> notifications}}
        {{> yield}}
    </div>
    <!--Mobile-->
    <div class="hidden-sm hidden-md hidden-lg">
        {{> notifications}}
        {{> yield}}
    </div>
</template>
<template name="loading">
Loading...
</template>

这是包含另一个产量的文件:

<template name="board">
    <!--Desktop-->
    <div class="container hidden-xs full-height">
        <div class="row" style="height:90%;">
            <!--Projects-->
            <div class="col-sm-4 full-height">
                {{> projects}}
            </div>
            <!--Chat-->
            <div class="col-sm-8 full-height">
                {{> yield "chat"}}
            </div>
        </div>
        <div class="row" style="position:absolute;bottom:0px;left:20px;">
            {{> footer}}
        </div>
    </div>
    <!--Mobile-->
    <div class="hidden-sm hidden-md hidden-lg full-width">
        <!--Projects-->
        {{> projects}}
    </div>
</template>

谢谢!!!

【问题讨论】:

  • 首先,您的代码有点过时了。 Iron 路由器 API changed since version 1.0。你能先更新一下,看看有没有帮助?其次,为了告诉您更多信息,我们可能还需要向您提供html 代码。
  • 非常感谢。我更改了路由语法,但没有发生任何不同。

标签: javascript meteor render iron-router


【解决方案1】:

所以这就是问题所在,经过一堆摆弄之后,我意识到不支持有两个收益(尽管一个是隐藏的)。愚蠢的错误!确保你只有一个收益部分!!

【讨论】:

  • 我也遇到了这个问题,不得不将我的模板拆分成更小的块,并使用许多像你的{{&gt; yield "chat"}} 这样的“辅助”来使其工作。尽管恕我直言,这可能是最好的
猜你喜欢
  • 2014-07-06
  • 2015-12-22
  • 1970-01-01
  • 2014-05-26
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
相关资源
最近更新 更多