【问题标题】:Meteor - Using session in handlebars conditions?Meteor - 在车把条件下使用会话?
【发布时间】:2014-04-05 08:34:24
【问题描述】:

我有一个用户个人资料页面,它有自己的导航项目(即关于我、图片等)我已经单击这些功能以设置会话变量。

在我的模板中,我想根据会话显示内容(除非有更好的方法)

例子:

 {{#if activeTabIs "About Me"}}
     {{> ProfileAbout}}
 {{/if}}
 {{#if activeTabIs "Pictures"}}
     {{> ProfileGallery }}
 {{/if}}

Template: userProfile

...

// I've tried this
Template.userProfile.activeTabIs = function() {
    return Session.get('ActiveProfileTab');
};

// And this
Handlebars.registerHelper('activeTabIs', function(){
    return Session.get("ActiveProfileTab");
});

Manager

上面总是返回 true 并显示所有内容。如果我只使用这样的助手:

{{activeTabIs}}

它可以工作,就像我通过控制台切换会话时一样,它会动态变化。但是如果条件不起作用,则车把。

如果有更好的方法来处理这个问题,我会喜欢一些想法。例如,如果我可以:

{{RenderActiveTab}}

但是我仍然想了解我在这些条件下做错了什么。我在联盟示例中引用了文档,但是它没有使用会话。

【问题讨论】:

    标签: meteor handlebars.js


    【解决方案1】:

    这似乎应该作为一个全局助手工作:

    Handlebars.registerHelper('activeTabIs', function(tab){
      return Session.equals('ActiveProfileTab',  tab);
    });
    

    然后你可以在你的模板中使用它,就像你最初的例子一样。试一试,让我知道它是否有效。

    【讨论】:

    • 像大卫一样工作。你真是个了不起的人。谢谢...再次:)
    【解决方案2】:

    我认为你可以用路由器来做到这一点。 (例如铁路由器)

    这是用户单击链接时更改模板的代码:

    Router.map(function() {
        this.route('home', {path: '/'});
        this.route('ProfileAbout', {path: '/about'});
        this.route('ProfileGallery', {path: '/gallery'});
    
        });
    
     //html example
    
     <a href="/about">This shows the ProfileAbout template</a>
    

    更多关于如何使用 Iron Router:https://github.com/EventedMind/iron-router

    //你可以用它做一些疯狂的事情

    【讨论】:

    • 除非我不知道 Iron-router 中有更高级的选项,否则这并不完全相关。我已经路由到该页面并尝试根据会话中的嵌入式模板/查询过滤内容。不过我很感激。
    • 意思是,我不想为此目的使用单独的路线。 :)
    猜你喜欢
    • 2023-03-25
    • 2013-11-21
    • 2018-01-15
    • 2018-10-13
    • 2012-10-14
    • 2014-04-13
    • 2014-04-03
    • 2016-02-16
    • 1970-01-01
    相关资源
    最近更新 更多