我正在使用流星和铁路由器制作博客。我想为几个不同的“类别页面”使用单个控制器,它会在yield区域中过滤博客文章列表。
当URL更改时,文章列表不会被重新呈现。即文章列表不是被动的。有趣的是,如果我导航回主页,则显示正确的文章列表。
当我在类别路径控制器上的不同路线之间切换时,如何更改文章列表?
请注意,整个项目的代码可用here。
这是我的路线控制器:
CategoryController = RouteController.extend({
action: function(){
this.render();
},
template: 'category',
data: function(){
return {category: this.params.category};
}
});
CategoryController.helpers({
articles: function(){
return Articles.find({category: this.params.category});
}
});
这是它呈现的模板:
<template name='category'>
<div class="container">
<h2>{{category}}:</h2>
<ul>
{{#each articles}}
<li>
{{#linkTo route="article.show"}}
{{title}}
{{/linkTo}}
</li>
{{/each}}
</ul>
</div>
</template>
Deps.autorun
之后,我认为这不是答案。 答案 0 :(得分:1)
文章列表不会更改,因为模板助手未使用被动数据源。您可以使用RouteController.getParams
方法建立对路由参数的响应依赖关系,如下所示。
CategoryController.helpers({
articles: function(){
var controller = this;
var params = controller.getParams();
return Articles.find({category: params.category});
}
});
注意:如果要在哈希更改时重新运行函数,则可以执行此操作 这样:
// get a handle for the controller. // in a template helper this would be // var controller = Iron.controller(); var controller = this; // reactive getParams method which will invalidate the comp if any part of the params change // including the hash. var params = controller.getParams();
默认情况下,路由器将遵循正常的浏览器行为。如果你 单击带有散列碎片的链接,它将滚动到具有该散列的元素 ID。如果你想使用controller.getParams()你可以把它放进去 要么你自己的自动运行,如果你想做一些程序性的,或在 帮助者。