是否有一种很好的方法可以强制Ember Data从服务器eaven加载资源,如果它已经存储了?
我有一个简单的show用户操作store.find('users',id)
模型只加载一次,第一次尝试显示页面第二次我去我的模型从商店加载这是正常的ember数据行为我知道。但是我每次都需要加载它。
编辑: 我找到的唯一方法是这样做:
@store.find('user',{id: params.user_id}).then (users)->
users.get('firstObject')
然而它迫使我对我的索引动作实施“虚假”的表演行动......
答案 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