Ember.Router在页面重新加载时丢失动态段的上下文

时间:2012-07-11 11:02:39

标签: ember.js

我一直试图调试一段时间,我可能已经弄明白问题是什么,让我通过使用fiddle来解释发生的事情

导航至http://fiddle.jshell.net/ivanvanderbyl/mfqEB/show/#/projects/1,您会发现网址中的动态细分已替换为null - 它应保持为1

根据我可以收集的信息,路由一次后,Ember Router会调用更新URL,用相应实例化对象获取的值替换动态段,在本例中为App.Project。

问题是此时未加载App.Project因此idnull

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

2 个答案:

答案 0 :(得分:1)

将projects.index中的connectOutlets直接移动到项目中似乎可以解决问题。不要问我原因。

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)
      )
    )

  )
)

答案 1 :(得分:0)

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

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