ember.js中的浏览器刷新(F5)错误

时间:2014-01-01 07:56:20

标签: browser ember.js refresh

我的工作:Rails4 + Ember.js(1.0.0)。

问题:

当我从'#/ posts'中linkTo'#/ posts / 1'时,没关系。

但是,如果我在'#/ posts / 1'路线刷新(F5),浏览器将加载'#/ posts'路线,而不是'#/ posts / 1',这是我想要的。

为什么呢?有什么理由吗?

在router.js.coffee中:

App.Router.map ()->
  @resource 'posts', ()->
    @route 'new'
    @route 'edit', {path: '/:post_id'}

路线:

App.PostsEditRoute = Ember.Route.extend({
  model: (params)->
    return App.Post.find(params.post_id)
})

控制器:

App.PostsEditController = Ember.ObjectController.extend({
  actions: {
    update: ()->
      // $('button[name=update]').find('.btn-load').addClass('active')
      @get('content.transaction').commit()
  }
})

谢谢,HappyNewYear,

更新

@ kingpin2k

DAtrs.Store = DS.Store.extend
  revision: 13,
  adapter: 'DS.RESTAdapter'

gem 'ember-rails'
gem 'ember-source', '1.0.0'
gem 'handlebars_assets', '~> 0.14.1'
gem 'emblem-rails'

@史蒂夫-H

是的!理论上你是对的。

我将'edit'更改为'post'

我在console.log中使用PostIndexRoute进行了测试。 以前没有打电话给你,但你回答@resource

谢谢!

但是,刷新问题仍然存在。

并且,它产生了一个新问题。当我linkTo路线/posts/:post_id时,它不显示信息,但在此之前。(你的答案解释了它)

因为然后,我在浏览器中看到了控制台。它接受了'/posts.json'的请求,而不是'/posts/1.json'。为什么呢?

您对ember-data和DS.RESTAdapter的理解是什么。

路线:

App.PostIndexRoute = Ember.Route.extend({
  model: (params)->
    console.log '...PostIndexRoute......'
    return App.Post.find(params.post_id)
})

我确认'/posts/1.json'并且有效:

{
  "post": {
    "title": "Hello World",
    "id": 1
  }
}

抱歉,谢谢!

更新-2

  

因为然后,我在浏览器中看到了控制台。它接受了'/posts.json'的请求,而不是'/posts/1.json'。为什么呢?

意思是:

当我linkTo路线/posts/:post_id时,它不显示信息。

但在控制台中:

...PostIndexRoute......
XHR finished loading: "/posts".

我不知道为什么不“/ posts / 1”?

当我这次刷新浏览器时,它会重定向到'/#/ posts'。

1 个答案:

答案 0 :(得分:0)

您的路由器设置似乎是个问题。尝试:

App.Router.map ()->
  @resource 'posts', ()->
    @route 'new'
    @resource 'edit', {path: '/:post_id'}

当您{{link-to}}时,您直接传递模型对象,并且不会调用路径上的model:函数。刷新时,您正在重建给定id的模型。为编辑路径指定resource将使Ember使用您的PostsEditRoute