【问题标题】:Ember: transition to route passing the ID instead of objEmber:过渡到通过 ID 而不是 obj 的路由
【发布时间】:2013-05-18 17:25:43
【问题描述】:

我有一些类似 /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 作为号码。我想转换到这条路线,就像我只是输入了 url /ads/ID

【问题讨论】:

  • 也许我把你的问题弄错了,但是this.transitionToRoute('ads.ad', adObj.get('id')); 是怎么回事?
  • 我试过了。 ember 转到/ads/undefined。可能我可以通过覆盖序列化钩子来做我需要的事情
  • 是的,serialize 钩子是我猜的一个选项
  • 实际上不是 - 查看更新

标签: javascript ember.js


【解决方案1】:

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

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

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

【讨论】:

  • 在尝试重定向到基于字符串而不是基于 id 的动态段的 url 时必须使用它。
【解决方案2】:

这是一个用例:

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

CP

【讨论】:

    【解决方案3】:

    您对此有何用例?大多数情况下,当您希望通过 id 指定对象时,您已经将对象传递给 transitionTo。您能否提供有关您正在尝试做的事情的更多背景信息?我认为您可能可以在不使用对象 ID 的情况下完成它。

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

    更多详情请见Ember.JS Route api -- model method

    【讨论】:

    • 我保存(HTTP POST)。此保存返回一个对象,但由于某些 API 细节,它没有嵌入相关数据。但是当 GET 完成时,这些数据是嵌入的。所以目前我必须做 POST,然后是 GET,然后是 transitionTo
    • 澄清一下,您使用的是 Ember-data 吗?
    • 执行 POST 和 GET(之后实例化对象)然后将对象传递给 transitionTo 是否有问题?
    • 这正是我所做的。但这是一种重复的工作,当传递 ID 而不是对象时,ember 可以处理自己(以及在转到 URL 时它已经做了什么)
    • 这是有道理的。将一个类方法添加到你的模型中怎么样?比如MyModel.instantiateFromId(id),它包装了 POST 和 GET 调用并返回一个对象?这样你只需拨打transitionTo("route.action", MyModel.instantiateFromId(id))。正如我的回答所说,现在绝对没有办法将 id 隐式转换为 transitionTo 的对象。
    猜你喜欢
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多