是否可以使用'this'#link到包含2个动态段的路由?

时间:2013-07-23 14:55:11

标签: ember.js

我实现了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>

这是可能的,还是有替代方案?

1 个答案:

答案 0 :(得分:4)

您可以将多个参数传递给linkTo。这也适用于嵌套路由。 Ember遍历嵌套路径树并相应地为其设置模型。

{{#linkTo 'ab' a b}}Foo{{/linkTo}}

其中ab是可在该模板中解析的模型。

编辑:发表评论

您需要的是一种自定义serialize方法,该方法将模型转换为具有与路径上定义的ID相对应的键的对象。 serialize linkTo方法用于构建路由。

serialize: function(model) {
  return { a: model.get('a'), b: model.get('b') }; 
}

注意,在资源路径的model挂钩上,您需要使用params散列中的相同键来进行查找。这是在用户直接访问网址时使用,而不是通过linkTo

请参阅此jsbin示例。