Ember.js 如何将链接设置为带有动态线段的路线

Ember.js 如何将链接设置为带有动态线段的路线,ember.js,ember-router,Ember.js,Ember Router,如何将链接设置为带有动态段的管线。根据指南,我从这个开始 window.App = Ember.Application.create() App.Router.map -> @resource 'products' @resource 'product', path: '/product/:product_id' 在我的模板中: {{#linkTo "product.1"}}products{{/linkTo}} 不幸的是,这给了我以下错误: Uncaught Error: a

如何将链接设置为带有动态段的管线。根据指南,我从这个开始

window.App = Ember.Application.create()
App.Router.map ->
  @resource 'products'
  @resource 'product', path: '/product/:product_id'
在我的模板中:

{{#linkTo "product.1"}}products{{/linkTo}}
不幸的是,这给了我以下错误:

Uncaught Error: assertion failed: The attempt to linkTo route 'product.1' failed. 
The router did not find 'product.1' in its possible routes: 'products', 'product', 'index' 
需要在
路由器.map
中定义的路由,因此根据您的映射,它应该只是
产品

对于动态段,您还必须传递一个对象,该对象将在
ProductRoute
中序列化。几乎所有场景中的序列化都不需要开发人员做任何事情,因为Ember依赖于约定。在极少数情况下,必须实现序列化a,但在大多数情况下,您不必触摸它

如果您在
{{each}}
循环中使用
{{linkTo}
,您可以这样做:

{{#each product in controller}}
    {{#linkTo product product}}Details{{/linkTo}}
{{/each}}

其中第一个参数是路由名称,第二个参数是模型对象。在第一个代码中,对象也被命名为
product
,而在第二个代码中,它只是作为
this
传递,这是迭代的产物

如果您遇到一种不寻常的情况,即您必须链接到动态路由,而不使用
{{each}
循环,则必须在
控制器
(首选)或
视图
中公开对象。然后,您必须执行以下类似操作:

App.SomeController = Em.Controller.extend
  product: null

App.SomeRoute = Em.Route.extend
  ### 
  controller is actually `SomeController` here
  model is not being used, and is null, while the actual model being
  supplied to the controller is `product`, retrieved from store
  ###
  setupController: (controller, model) ->
    product = App.Product.find 1
    controller.set 'product', product
    return
虽然您的模板与此类似:

{{#linkTo product controller.product}}Product{{/linkTo}}
路线如何知道id?

。路由将显示您传递的对象,并公开一个具有单个属性的对象,该属性具有该路由的模型名称,后跟“\u id”,在本例中为
产品\u id
,因此当您单击该链接时,应用程序激活
产品路由
,运行创建该id属性的序列化方法,随后将用作钩子的参数。这就是调用
find
作为参数传递
params.product\u id
的地方。然后,该模型返回将由使用的该模型的承诺,将对象作为
controller.content
或简单的
controller
公开给视图层

#每个
-循环中,我必须引用
产品
{{{{linkTo'product'this}}}详细信息{{/linkTo}
{{#linkTo product controller.product}}Product{{/linkTo}}