1

我一直在尝试调试它一段时间,我可能已经弄清楚问题所在,让我通过使用小提琴来解释发生了什么

导航到http://fiddle.jshell.net/ivanvanderbyl/mfqEB/show/#/projects/1,您会注意到 url 中的动态段被替换为null- 它应该保持为1

据我所知,在路由一次之后,Ember Router 会调用更新 URL,用从相应实例化对象(在本例中为 App.Project)中获取的值替换动态段。

问题是App.Project此时没有加载所以idnull

现在无论这是我的错误还是实施失败,其他人看到了吗?

4

2 回答 2

1

将 connectOutlets 从 projects.index 直接移动到项目中似乎可以解决问题。不过不要问我为什么。

jsFiddle

Router: Ember.Router.extend(
  location: 'hash'
  enableLogging: true

  root: Ember.Route.extend(

    listProjects: Ember.Route.transitionTo("projects.index")
    showProject:  Ember.Route.transitionTo("projects.show")

    index: Ember.Route.extend(
      route: "/"
      redirectsTo: 'projects.index'
    )

    projects: Ember.Route.extend(
      route: '/projects'

      connectOutlets: ((router) ->
        router.get('applicationController').connectOutlet('projects', App.Project.find())
      )

      index: Ember.Route.extend(
        route: '/'
      )

      add: Ember.Route.extend(
        route: '/new'
      )

      show: Ember.Route.extend(
        route: '/:project_id'

        connectOutlets: (router, project) ->
          console.log project.get('name')

          # router.get('applicationController').connectOutlet('project', project)
      )
    )

  )
)
于 2012-07-11T14:31:39.980 回答
0

因此,经过大量调查,正确的解决方案是简单地不在模型上指定主键属性,在这种情况下,我不应该在 Project 模型上指定 ID 属性。Ember Data 在内部处理这个问题。

感谢 Peter Wagenet 在 Github 上指出这一点。

于 2012-07-18T03:53:16.480 回答