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}}