在meteor.js中嵌套助手的问题?

时间:2013-05-16 04:41:57

标签: javascript templates meteor handlebars.js

在我的meteor.js应用程序中,我有以下模板:

    <ul class="nav nav-tabs" id="userTabs">
        {{#if tabIs "editedTab"}}
            <li class="active">
                <a class='tabButton' id="editedTab">Edited</a>
            </li>
        {{/if}}
        {{#if tabIs "starredTab"}}
            <li class="active">
                <a class='tabButton' id="starredTab">Starred</a>
            </li>
        {{/if}}
    </ul>
    <div id="usernav" class="tab-content">   
        {{#if tabIs "editedTab"}}
            <div id="edited" class="tab-pane active">
                <ul>
                    {{#each edited}}
                        <li><a class="left-nav" href="{{entryLink this}}">{{title}}</a></li>
                    {{/each}}
                </ul>
            </div> 
        {{/if}}
        {{#if tabIs "starredTab"}}
        <div id="starred" class="tab-pane active" >
            <ul>
                {{#each starred}}
                <li><a class="left-nav" href="{{entryLink this}}">{{title}}</a></li>
                {{/each}}
            </ul>
        </div>
        {{/if}}
    </div>

哪个帮助器tabIs嵌套在#if中(根据meteor文档,这是可以接受的,因为它们已添加到把手中。)

然后我有coffeescript:

Template.leftNav.tabIs = ->
    Session.get('tabIs')

Template.leftNav.events =
    'click .tabButton' : (evt) ->
         $el = $(evt.target)
         Session.set( 'tabIs' , $el.attr('id'))

并在Meteor.startup:

中播种会话变量
Meteor.startup ->
    Session.set('tabIs', 'editedTab')

问题是两个标签都在任何时候呈现,我不知道为什么

1 个答案:

答案 0 :(得分:1)

你也需要在helper语句中添加一个条件!目前它返回的'editedTab'不是null所以它返回true。 (条件为if(Session('editedTab')) {..}

改变你的助手:

Template.leftNav.tabIs = (path) ->
  Session.get("tabIs") is path

(使用equals可以比上面更有效地检查相等性:)

Template.leftNav.tabIs = (path) ->
  Session.equals "tabIs", path