Ember.js 模型的余烬重复加载

Ember.js 模型的余烬重复加载,ember.js,Ember.js,我想使用链接模板中已收到的信息。嵌套路由产生了一大堆错误,我对如何传递这些数据有点迷茫,但这似乎是可能的 这是可行的,但我觉得这是个差劲的黑客。理想情况下,我只需要一个API往返 App.Router.map -> @resource 'photos' @route 'photo', path: 'photo/:photo_id' App.PhotosRoute = Ember.Route.extend model: -> Ember.$.getJSON('h

我想使用链接模板中已收到的信息。嵌套路由产生了一大堆错误,我对如何传递这些数据有点迷茫,但这似乎是可能的

这是可行的,但我觉得这是个差劲的黑客。理想情况下,我只需要一个API往返

App.Router.map ->
  @resource 'photos'
  @route 'photo', path: 'photo/:photo_id'


App.PhotosRoute = Ember.Route.extend
  model: ->
    Ember.$.getJSON('http://api.flickr.com/services/feeds/photos_public.gne?tags=cake&tagmode=all&format=json&jsoncallback=?')

  setupController: (controller,model) ->
    controller.set 'photos', model.items.map (i) ->
      i.id = model.items.indexOf(i)


App.PhotoRoute = Ember.Route.extend
  model: (params) ->
    jQuery.getJSON('http://api.flickr.com/services/feeds/photos_public.gne?tags=cake&tagmode=all&format=json&jsoncallback=?').then (api) ->
      api.items[params.photo_id]

App.PhotosController = Ember.ObjectController.extend
  itemController: 'photo'

{{{#linkTo'photo'this}{{/linkTo}}

您可以使用
modelFor(routeName)
从某个路由获取模型。在您的情况下,您可能会获取
photoroute
中的所有数据,并希望重用这些数据。您可以在
摄影路线中使用此选项:

App.PhotoRoute = Ember.Route.extend
  model: (params) ->
    @modelFor('photos').items[params.photo_id]

因此,只需执行一个api调用。

谢谢-这很有效。但是,如果我点击刷新,它就会失败。这是余烬的正常行为,还是我可以在事件结束时在/photo/1处使用回退,而不通过/photos?您有2个选项。1-在您的照片路线模型方法中,在api中按id查找,我不知道这是否适用于您的情况。2-将您的照片路线嵌套在照片路线内,这样当转换到照片路线时,首先将转换到所有父路线,在这种情况下是照片。你会得到数据的。您需要更新链接到“photos.photo”
,如果您只想使用“photo”,您可以将
@route'photo',path:'photo/:photo\u id'
更改为
@resource'photo',path:'photo/:photo\u id'
App.PhotoRoute = Ember.Route.extend
  model: (params) ->
    @modelFor('photos').items[params.photo_id]