Ember:转换到路由传递ID而不是obj

时间:2013-05-18 17:25:44

标签: javascript ember.js

我有一些路线,比如/ 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

一样

3 个答案:

答案 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