2

我有一些像 /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

4

3 回答 3

8

这可以通过将 URL 传递给 transitionTo 来完成。例如,

this.transitionToRoute('/ads/' + adObjId)

将使用 URL 中的参数调用 model() 方法。

于 2014-02-19T21:23:57.777 回答
7

这是一个用例:

从列表视图过渡到详细视图。在列表视图中,记录没有任何关联的关系,但详细视图应该旁加载关系数据。因此,模型在列表视图和详细视图之间不是 1:1。应该有一种方法可以简单地使用 id 进行转换。

CP

于 2013-08-08T14:20:12.540 回答
2

你的用例是什么?大多数情况下,当您希望通过 id 指定对象时,您已经拥有要传递给transitionTo. 你能提供更多关于你想要做什么的背景吗?我认为您可以在不使用对象 ID 的情况下完成它。

无论如何,我认为没有什么好的方法可以做到这一点,因为当你通过 转换时,不会调用transitionTo(someRoute, someModel)路由的钩子,而你传入的模型 ( ) 会直接提供给其他路由钩子 ( , , ) .modelsomeModelsetupController(controller, model)redirect(model)renderTemplate(controller, model)

有关更多详细信息,请参阅Ember.JS Route api -- 模型方法

于 2013-05-19T01:42:52.790 回答