6

有没有一种很好的方法可以强制 Ember Data 从服务器加载资源,即使它已经在存储中?

我有一个简单的显示用户操作,store.find('users',id)该模型仅在第一次尝试显示页面时加载一次,第二次我的模型是从商店加载的,这是我知道的正常 ember 数据行为。但是我每次都需要加载它。

编辑:我发现的唯一方法是这样做:

@store.find('user',{id: params.user_id}).then (users)->
  users.get('firstObject')

但是它迫使我对我的索引操作实施“假”显示操作...

4

6 回答 6

5

我认为这... http://emberjs.com/api/data/classes/DS.Model.html#method_reload

model.reload()

祝你好运

于 2013-11-11T14:52:19.953 回答
3

此外,您可以调用getByIdwhich 将返回该记录的任何存在或 null 实例,然后调用unloadRecord以将其从缓存中删除。不过我也喜欢 Edu 的回答,这样我就不用担心其他地方的记录了。也许我会使用getById这种reload方式更新任何引用用户的引用。(请原谅我错误的咖啡脚本,如果它是错误的)。

user = @store.find('user', params.user_id)
if (user) 
  @store.unloadRecord(user)
于 2013-11-11T16:50:49.130 回答
2

多亏了machty ,热销

作为本周末进入测试版的查询参数功能的一部分,添加了一种新方法,称为 Route.refresh()...

/**
Refresh the model on this route and any child routes, firing the
`beforeModel`, `model`, and `afterModel` hooks in a similar fashion
to how routes are entered when transitioning in from other route.
The current route params (e.g. `article_id`) will be passed in
to the respective model hooks, and if a different model is returned,
`setupController` and associated route hooks will re-fire as well.

An example usage of this method is re-querying the server for the
latest information using the same parameters as when the route
was first entered.

Note that this will cause `model` hooks to fire even on routes
that were provided a model object when the route was initially
entered.

@method refresh
@return {Transition} the transition object associated with this
  attempted transition
@since 1.4.0
*/
于 2014-06-02T22:23:11.403 回答
1

您可以在 setupController 挂钩中使用 Promise 和 Edu 提到的 reload 方法来执行此操作。

  setupController: ->
    @store.find('myModel', 1).then (myModel) ->
      myModel.reload()
于 2014-06-03T09:04:13.703 回答
0

如果您确定要显示的记录会在某个操作后发生变化,那么您可以调用this.refresh()Route 中的方法。例如:

ProductsRoute = Ember.Route.extend
  model: ->
    @store.find 'product',
      activated: true

  actions:
    accept: (product) ->
      if not product.get('activated')
        product.set 'activated', true
        product.save()
          .catch (err) ->
            console.log err
            product.rollback()
          .then =>
            @refresh()

    ignore: (product) ->
      if not product.get('ignored')
        product.set 'ignored', true
        product.save()
          .catch (err) ->
            console.log err
            product.rollback()
          .then =>
            @refresh()

如果从子路由调用操作 - 例如产品/建议 - 将为父路由和子路由重新加载模型。

于 2015-01-17T16:09:29.347 回答
0

我认为您正在寻找的是DS.Store#fetchById

于 2015-05-21T12:33:39.253 回答