强制ember数据store.find从服务器加载

时间:2013-11-11 13:41:59

标签: ember.js ember-data

是否有一种很好的方法可以强制Ember Data从服务器eaven加载资源,如果它已经存储了?

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

编辑:  我找到的唯一方法是这样做:

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

然而它迫使我对我的索引动作实施“虚假”的表演行动......

6 个答案:

答案 0 :(得分:5)

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

model.reload()
祝你好运

答案 1 :(得分:3)

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

user = @store.find('user', params.user_id)
if (user) 
  @store.unloadRecord(user)

答案 2 :(得分:2)

感谢presses

,感谢machty。{
  

有一种新方法被添加为查询params功能的一部分,本周末将进入测试版,名为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
*/

答案 3 :(得分:1)

您可以在setupController挂钩中使用promise和Edu提到的重载方法执行此操作。

  setupController: ->
    @store.find('myModel', 1).then (myModel) ->
      myModel.reload()

答案 4 :(得分:0)

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

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

如果从子路线呼叫动作 - 例如产品/建议 - 将为父路线和儿童路线重新加载模型。

答案 5 :(得分:0)

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