【问题标题】:Using a slug in Ember.js 1.x routes在 Ember.js 1.x 路由中使用 slug
【发布时间】:2013-10-23 08:30:48
【问题描述】:

我正在拼命尝试让 Ember 1.x 中的 slug 正常工作。

我的序列化方法似乎工作正常。我可以使用 link-to helper 或 transitionToRoute 方法毫无问题地导航到我的路线。 但是当我重新加载我的页面时,我得到了一堆错误,因为我的 promise 解析为一组模型而不是单个模型。

如何将 findQuery 的结果减少到一个模型?

我在这里找到了旧版 Ember.js 的有用答案: Using a slug in an emberjs route 不幸的是,该解决方案不再起作用。 “one”没有定义,所以我试图让我的代码适应当前版本。根据 Promise 文档,应将 Promise 对象的 then 方法中的返回值传递给下一个处理程序。但是之后我仍然得到一个数组和我的错误。

我的路线实现:

App.ManageRoute = Ember.Route.extend
  model: (params) ->
    promise = @get('store').findQuery('company', {slug: params.company_id})
    promise.then (models) ->
      return models.get("firstObject")
    return promise;

  serialize: (model, params) ->
    return {company_id: model.get('slug')}

[更新]

解决方案是为单个模型创建并返回一个新的 Promise 对象。

See marvilein's answer

【问题讨论】:

  • 你能显示你的路由器映射吗?

标签: ember.js routing


【解决方案1】:

你可以做的一件事是创建一个新的 Promise,它只代表一个对象而不是整个数组:

App.ManageRoute = Ember.Route.extend
  model: (params) ->
    promise = @get('store').findQuery('company', {slug: params.company_id})
    newPromise = Ember.Deferred.create()
    promise.then (models) ->
      newPromise.resolve(models.get("firstObject"))
    return newPromise;

PS:我不知道coffeescript,所以可能会有一些小的语法错误。而且我不知道 Ember Data 是否提供了更方便的方法来实现这种行为:-)

【讨论】:

  • 承诺管理的好例子,你的回复中有错字newPromise.resolve(model.get("firstObject"))应该是newPromise.resolve(models.get("firstObject"))
  • 像魅力一样工作:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多