4

我实现了一个解决方案的变体,用于具有多个动态段的路由,其中​​一个模型是数组。

可以在这里找到实现。

基本上,路由器是这样定义的:

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>

这甚至可能吗,还是有其他选择?

4

1 回答 1

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资源路径的挂钩上,您需要使用参数哈希中的相同键进行查找。这是在用户直接访问 url 而不是 via 时使用的linkTo

请参阅此jsbin示例。

于 2013-07-24T03:07:38.530 回答