我实现了solution for having a route with multiple dynamic segments的变体,其中一个模型是数组。
可以找到实施here。
基本上,路由器的定义如下:
App.Router.map(function() {
this.resource("ab", { path: "/:a/:b" });
});
导航到此路线时,a
按原样使用,b
转换为数组。两个“模型”都传递给各自的控制器,这些控制器都将模板渲染到应用程序模板的命名插座中。
现在,我想在显示数组的模板中使用#linkTo
帮助器。为了使这项工作,我会以某种方式将{{this}}
和a
的当前值组合成一个对象。
然后,我们的想法是能够为该模板做这样的事情:
<script type="text/x-handlebars" id="b">
Template b:
{{#each model}}
{{#linkTo ab {a: {{this}}, b: controller.content} }} {{this}} {{/linkTo}}
{{/each}}
</script>
这是可能的,还是有替代方案?
答案 0 :(得分:4)
您可以将多个参数传递给linkTo
。这也适用于嵌套路由。 Ember遍历嵌套路径树并相应地为其设置模型。
{{#linkTo 'ab' a b}}Foo{{/linkTo}}
其中a
和b
是可在该模板中解析的模型。
您需要的是一种自定义serialize
方法,该方法将模型转换为具有与路径上定义的ID相对应的键的对象。 serialize
linkTo
方法用于构建路由。
serialize: function(model) {
return { a: model.get('a'), b: model.get('b') };
}
注意,在资源路径的model
挂钩上,您需要使用params散列中的相同键来进行查找。这是在用户直接访问网址时使用,而不是通过linkTo
。
请参阅此jsbin示例。