我有一些路线,比如/ ads /:ad_id,我可以从我的控制器那里做
this.transitionToRoute('ads.ad', adObj)
我怎么能做类似的事情,但这次传递ID而不是加载的对象?
当然我知道我可以先用ID加载一个obj,但是Ember的力量正在为我们丢失样板。
更新:因此,默认情况下,Ember将模型序列化为URL参数,类似
mode_instance -> { model_name_id: model_instance.id }
我的琐碎尝试正在进行
this.transitionToRoute('ads.ad', { id: adObjId })
但是当传递模型对象时,Ember不会重新获取它。
所以,问题是:我有一条依赖于广告ID的路线(单一广告视图)。我有这个ID作为号码。我想过渡到这条路线,就像我只是输入网址/ads/ID
答案 0 :(得分:7)
以下是一个用例:
从列表视图转换为详细视图。在列表视图中,记录没有任何关系,但详细视图应该侧载关系数据。因此,列表视图和详细视图之间的模型不是1:1。应该有一种简单地使用id转换的方法。
CP
答案 1 :(得分:7)
这可以通过将URL传递给transitionTo来实现。例如,
this.transitionToRoute('/ads/' + adObjId)
将使用URL中的参数调用model()方法。
答案 2 :(得分:2)
你的用例是什么?大多数情况下,如果您希望按ID指定对象,则已将对象传递给transitionTo
。你能提供更多关于你想要做什么的背景吗?我认为你可以在不使用对象id的情况下完成它。
在任何情况下,我认为没有一种好的方法可以做到这一点,因为当您通过transitionTo(someRoute, someModel)
进行转换时,不会调用路径的model
挂钩,也不会调用您传入的模型( someModel
)直接提供给其他路由挂钩(setupController(controller, model)
,redirect(model)
,renderTemplate(controller, model)
)。
有关详细信息,请参阅Ember.JS Route api -- model method。