参数不会传递到嵌套模板中

时间:2015-09-16 09:27:31

标签: meteor handlebars.js

我正在为网上商店做类别侧边栏模板。我将在2个地方使用它 - 在客户和管理员方面。每个人都有自己的点击类别服务。我想传递参数“redirect”,它将决定将要执行的操作,但问题是,该参数在嵌套模板中不可见 - 仅在第1级类别中。

HTML:

<template name="categoriesSidebar">
    <ul>
        {{#each mainCategories}}
            <li>
                {{> categoriesSidebarItem redirect=true data=this }}
            </li>
        {{/each}}
    </ul>
</template>

<template name="categoriesSidebarItem">
    <a href="#">
        {{data.name}}
    </a>
    {{#if data.subCategories.length}}
        <ul>
            {{#each subCats }}
                <li>
                    {{> categoriesSidebarItem redirect=redirect data=this }}
                </li>
             {{/each}}
        </ul>
    {{/if}}
</template>

Javascript:

Template.categoriesSidebar.helpers({
    mainCategories:  function() {
    return Categories.find({'categoryLevel' : 1});
  }
});

Template.categoriesSidebarItem.helpers({
    subCats : function(){
        return Categories.find({_id:{$in: this.data.subCategories}});
    }
});

Template.categoriesSidebarItem.events({
    'click a' : function(event){
        if(this.redirect == true){
            Router.go('category',{_id : this.data._id});
            return false;
        }else{
            //categoryId is ReactiveVar used in another template
            categoryId.set(this.category._id);
        }
    }
})

结果:

Women
    Nike
Men
    Nike
    Adidas

女性和男性类别运行良好,点击它们后,“重定向”被视为真实,路由器重定向到所需的路线,但对于嵌套类别,“重定向”参数未定义。

如何将该参数传递给嵌套模板?

1 个答案:

答案 0 :(得分:0)

将代码更改为:

{{#if data.subCategories.length}}
    <ul>
        {{#each subCats }}
            <li>
                {{> categoriesSidebarItem redirect=../redirect data=this }}
            </li>
         {{/each}}
    </ul>
{{/if}}

每个块都会更改数据上下文,因此您需要从父数据上下文中检索重定向。这是../的作用。