在Ember.js 1.x路线中使用slu ..

时间:2013-10-23 08:30:48

标签: ember.js routing

我正在拼命试图让Ember 1.x工作。

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

如何将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

1 个答案:

答案 0 :(得分:2)

您可以做的一件事是创建一个新的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是否提供了更方便实现此行为的方法: - )