【问题标题】:How to use Materialize css Tabs in Meteor?如何在 Meteor 中使用 Materialise css Tabs?
【发布时间】:2016-03-03 06:49:25
【问题描述】:

Meteor.js 和 Materialize CSS Framework 的新手。我不完全理解如何将选项卡动态连接到 3 个不同的选项卡,因此当用户单击它时,.tab indicator/active 属性会与所需的路径路径一起滑过。如果我这样做:

客户端/app.html

  <template name="tabs">
    <ul class="tabs nav-tabs hide-on-med-and-down">
      <li class="tab col s4" id="nt1"><a href="/page1">Page One</a></li>
      <li class="tab col s4" id="nt2"><a href="/page2">Page Two</a></li>
      <li class="tab col s4" id="nt3"><a href="/page3">Page Three</a></li>
    </ul>
  </template>

客户端/app.js

  Template.layout.rendered = function() {
    $('ul.tabs').tabs();
  }

选项卡指示器有效,但不会更改指向正确页面的链接。 就像它阻止了转到页面的能力一样。我需要有关如何执行此操作的帮助,我已经有一段时间了。谢谢。

【问题讨论】:

  • 试试Template.tabs.rendered
  • @Mat.该死的没用。
  • 你添加了一些路由器吗??
  • @Mat.喜欢Router.route('/page-one');?如果是这样,是的。

标签: javascript jquery meteor materialize


【解决方案1】:

试试 'Template.tabs.onRendered(function(){' 而不是 'Template.tabs.rendered = function(){'

最后,您的选项卡初始化应如下所示:

    Template.tabs.onRendered(function(){
      $("ul.tabs").tabs();
    });

【讨论】:

    【解决方案2】:

    另一个更新如果你不想定义每个标签,你可以做类似的事情

    Js

    //Manual Method
    /*Template.tabs.rendered = function() {
       if(Router.current().route.path() === '/page2'){
          $("#nt2 a").addClass('active');
        }else if(Router.current().route.path() === '/page3'){
          $("#nt3 a").addClass('active');
        }  
        $('ul.tabs').tabs(); 
    }
    
    
    Template.tabs.events({
      'click #nt1': function(){
        Router.go('/');
      },
      'click #nt2': function(){
        Router.go('page2');
      },
      'click #nt3': function(){
        Router.go('page3');
      }
    
    })*/ 
    
    //Auto Method
    Template.tabs.rendered = function() {   
        $("#"+Router.current().route.getName()).addClass('active');     
        $('ul.tabs').tabs(); 
      }
    
    
    Template.tabs.events({
      'click .tabs li': function(e, t){
        var href = e.target.id;     
        Router.go(href);
      }  
    })
    

    路由器

    Router.configure({
      layoutTemplate: 'layout',  
    });
    
    Router.route('/', function () {  
      this.render('page-one');  
    },{
      name: 'page-one'
    });
    
    Router.route('/page2', function () {
      this.render('page-two');
    },{
      name: 'page-two'
    });
    
    Router.route('/page3', function () {
      this.render('page-three');
    },{
      name: 'page-three'
    });
    

    HTML

    <template name="layout">
      {{> tabs}}
    
      {{> yield}} 
    </template>
    <template name="tabs">
        <!--Manual Method-->
        <!--<ul class="tabs nav-tabs hide-on-med-and-down">
           <li class="tab col s4" id="nt1"><a href="/">Page One</a></li>
           <li class="tab col s4" id="nt2"><a href="/page2">Page Two</a></li>
           <li class="tab col s4" id="nt3"><a href="/page3">Page Three</a></li>
        </ul>-->
    
        <!--Auto Method-->
        <ul class="tabs nav-tabs hide-on-med-and-down">
          <li class="tab col s4"><a id="page-one" href="/">Page One</a></li>
          <li class="tab col s4"><a id="page-two" href="/page2">Page Two</a></li>
          <li class="tab col s4"><a id="page-three" href="/page3">Page Three</a></li>
        </ul>
    </template>
    
    <template name="page-one">
        <p>i am page-one</p>
    </template>
    
    <template name="page-two">
        <p>i am page-two</p>
    </template>
    
    
    <template name="page-three">
         <p>i am page-three</p>
    </template>
    

    【讨论】:

    • 这并没有真正奏效。它所做的是在 Page1 链接上启动活动状态,但是当您单击 Page2 时,它将转到没有活动状态的 Page2,依此类推。您可以通过再次单击它来获取它的活动状态。需要弄清楚如何让它做正确的行为。这是一个很好的步骤。谢谢。
    • @JohnHuntington 好的,我更新了我的答案,这是一个完整的工作示例。如果您需要实际查看它,请告诉我上传它。
    【解决方案3】:

    如果您可以在没有Router 的情况下呈现选项卡,这可能很有用。

    假设这些是您想要基于标签点击呈现内容的模板:

    <template name="page1">
    .....
    </template>
    
    <template name="page2">
    .....
    </template>
    
    <template name="page3">
    .....
    </template>
    

    现在在您的渲染区域:

    <template name="display">
        {{>tabs}}
        {{#if activeTab 'nt1'}}
            {{>page1}}
        {{/if}}
    
        {{#if activeTab 'nt2'}}
            {{>page2}}
        {{/if}}
    
        {{#if activeTab 'nt3'}}
            {{>page3}}
        {{/if}}
    </template>
    

    最后在你的 javascript 文件中:

    activeTab = new ReactiveVar('nt1'); //Your default tab
    
    Template.display.helpers({
        activeTab: function(tab){
            return (activeTab.get() == tab);
    });
    
    Template.tabs.events({
      'click #nt1': function(){
        activeTab.set('nt1');
      },
      'click #nt2': function(){
        activeTab.set('nt2');
      },
      'click #nt3': function(){
        activeTab.set('nt3');
      }
    });
    

    【讨论】:

    • 那很好。我很感激这个答案。我将与也一起练习。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多