С Эмбер 2.2.0, у меня есть маршрут:Ember.js 2.2 - Как обновить модель маршрута от компонента?
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
является вычисленное свойство в модели отчета.
модель Маршрут является самым последним объектом Report, и через POST
generate
действие заставляет сервер создать новую (таким образом, более свежий) отчет. Я хочу обновить временную метку этого [нового] отчета.
Мой вопрос: в Ember 2, как я могу заставить Route обновиться? Я новичок в Ember, поэтому я не уверен, что можно получить доступ к Маршруту непосредственно изнутри Компонента (или если я может, если это хорошая идея). Я не думаю, что просто перезагрузка модели будет работать, потому что после успешного POST
другая модель (т. Е. Запись с другим id
) будет возвращена @store.queryRecord "report", newest: true
, чем при загрузке страницы. Существующая модель будет такой же после POST
.
В качестве альтернативы, я был бы совершенно счастлив полностью перерисовать маршрут (это очень простая страница) или перейти на эту страницу снова, но я не могу понять, как это сделать.
На данный момент я просто заставляю страницу старой школы window.location.reload()
.
Рассматривая это по-другому, возможно, существует более идиоматический подход к решению этой проблемы с Эмбером.
Должен ли я загружаться во все (или некоторые) отчеты с помощью маршрута и заставлять обновление в этой коллекции после POST
? Я вижу, что Enumerable
имеет свойство .firstObject
- это то, что вычисленное свойство (другими словами, если моя модель маршрутов представляет собой сборник отчетов, и я нажимаю на нее перед этой коллекцией, будет ли это изменение автоматически распространяться через .firstObject
?)
Благодаря @awpeter, это прекрасно. Я прошел через (я думал, все) из руководств, но запутался с инъекцией зависимостей компонентов (согласно https://guides.emberjs.com/v2.2.0/components/triggering-changes-with-actions/#toc_passing -the-action-to-the-component), но это, похоже, больше подходит для принятия. –
Да, не проблема :) Я просто предлагал вам сделать, если вы еще этого не сделали. Также не стоит беспокоиться, что Ember - это спокойный комплекс, но как только вы получите его на самом деле приятно работать. Есть только эта начальная стена, с которой вам нужно перебраться. – Piotr