【问题标题】:Create a reusable template for tabs in Meteor为 Meteor 中的选项卡创建可重复使用的模板
【发布时间】:2013-10-04 03:31:25
【问题描述】:

所以我有一个这样的模板

<template name="tabs">
    <ul class='tabs'>
        <li activetab='tab1'>stream</li>
        <li activetab='tab2'>projects</li>
    </ul>
    <div>
        {{#if activeTabIs "tab1"}}
            {{> tabBody1}}
        {{/if}}
        {{#if activeTabIs "tab2"}}
            {{> tabBody2}}
        {{/if}}
    </div>
</template>

Template.tabs.events({
  'click .tabs li' : function (event, template) {
    Session.set("activeTab", $(event.currentTarget).attr("activetab"));
  }
});

Template.tabs.activeTabIs = function(tab) {
  return Session.get("activeTab") === tab;
}

但我希望在整个页面中都拥有多个这样的模板。他们不应该重复使用 Session.get("activeTab") 但可以说有自己的“范围”。我如何做到这一点?

【问题讨论】:

    标签: tabs scope meteor


    【解决方案1】:

    当 Meteor UI 推出后,这种事情有望变得更容易。现在,我将创建一个元模板并使用帮助器来绘制它。

    <template name="tabs">
        <ul>
            {{#each tabs}}
                <li>{{name}}</li>
            {{/each}}
        </ul>
        {{currentTab}}
    </template>
    
    
    Template.tabs.currentTab = function() {
        var tab = _.find(this.data, function(t) {
            return t.active === true;
        });
        if(tab) return Template[tab.template]();
        return '';
    }
    
    
    <template name="something">
        {{#with tabList}}{{> tabs}}{{/with}}
    </template>
    
    
    Template.something.tabList = function() {
        return [
            {name: 'stream', template: 'stream'},
            {name: 'projects', template: 'projects', active: true},
        ];
    }
    

    我是凭脑子写的,所以它可能无法开箱即用,但它应该能让你开始。我已经成功使用了类似的方法here - 用于叠加。

    【讨论】:

    • 谢谢!我尝试了一些类似的东西(不如你的解决方案好),但我遇到的问题是,每当你切换一个标签时,整个标签都会被重新渲染。这不是我想要的,因为我希望标签只被隐藏,并保持其“状态”。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2012-02-20
    • 2023-04-03
    • 2015-11-16
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多