【发布时间】:2016-04-20 10:00:48
【问题描述】:
使用 Ember 2.2.0,我有一条路线:
Dash.BacklogReportsRoute = Ember.Route.extend
model: ->
@store.queryRecord "report", newest: true
和一个组件:
Dash.BacklogReportComponent = Ember.Component.extend
report: null
actions:
generate: ->
# Send the request.
$.ajax
type: "post",
url: "/reports/generate/#{new Date().getFullYear()}",
success: =>
# Update the model.
# TODO - how to reload the model in place? Or at least just refresh
# the Route so we don't have to reload the entire app.
window.location.reload()
其中包括作为模板的一部分:
<p>
Report was generated {{report.timestamp}}.
</p>
其中timestamp 是报告模型上的计算属性。
Route 的模型是最新的 Report 对象,并且通过 POST generate 操作导致服务器创建更新的(因此更新的)报告。我想更新那个 [较新] 报告的时间戳。
我的问题是,在 Ember 2 中,我怎样才能让 Route 自行刷新? 我是 Ember 新手,所以我不确定是否可以直接从内部访问 Route一个组件(或者如果我可以,如果这是个好主意)。我不认为仅仅重新加载模型会起作用,因为在成功 POST 之后,@store.queryRecord "report", newest: true 将返回与加载页面时不同的模型(即具有不同 id 的记录)。 POST之后的现有模型将相同。
或者,我非常乐意完全重新渲染路线(这是一个非常简单的页面)或再次转换到“这个”页面,但我不知道该怎么做。
现在我只是强制使用老式页面window.location.reload()。
换个角度看,也许有一种更惯用的方法来解决 Ember 的这个问题。
我是否应该使用 Route 加载所有(或部分)报告,并在 POST 之后强制刷新该集合?我看到 Enumerable 有一个 .firstObject 属性 - 这是一个计算属性(换句话说,如果我的 Routes 模型是一个报告集合并且我推到该集合的前面,那么该更改会通过.firstObject 传播吗?自动引用?)
【问题讨论】:
标签: javascript ember.js routing refresh