我正在處理的Ember頁面是顯示操作員及其作業的網格,並在用戶創建新作業時自動更新該列表。我當前的最佳嘗試將在頁面加載時繪製預先存在的作業,但即使可以在Ember Inspector的數據視圖中看到新作業,頁面也不會刷新使用'saveNewJob'創建的任何新作業。Ember保存後數據自動刷新
下面是一些代碼 '..snip ..' 插入專注於重要的部分:
路線/ scheduler.js
export default ember.Route.extend({
model: function() {
return {
jobs: this.store.query('job', {
location: session.location,
date: session.selectedDate
},
operators: this.store.query('operator', {
location: session.location
}
}
},
action: {
saveNewJob: function(params) {
var newJob = this.store.createRecord('job',{
//job properties from params
};
var thisRoute = this;
newJob.save().then(function(){ thisRoute.refresh() });
}
}
}
模板/ scheduler.hbs
..snip..
{{#each model.operators as |op|}}
{{operator-row operator=op jobs=model.jobs}}
{{/each}}
{{outlet}}
templates/components/operator-row.hbs
<!-- Draw the grid for the operator -->
..snip..
<!--Draw jobs over grid -->
{{#if jobs.isFulfilled}}
{{#each jobsForOperator as |job|}}
{{operator-job job=job}}
{{/each}}
{{/if}}
組件/操作員row.js
jobsForOperator: Ember.computed('jobs', function() {
var opId = this.operator.get('id');
var retVal this.jobs.filter(function(item) {
return item.get('operator').get('id') === opId;
});
<!-- Append some drawing properties to each job in retVal -->
..snip...
},
..snip..
我還沒有看到需要添加任何控制器/調度。操作員作業組件是一個簡單的div,它使用圖紙屬性在操作員行中正確放置/繪製div。
創建新工作有很多種方法,但我故意將它們排除在外,因爲它們最終都會調用'saveNewJob',並且我可以從中獲取一個console.log語句。
我試過的一個解決方案是添加'this.store.findAll('job');'然後使用'jobs:this.store.filter('job',function(){})'創建model.jobs屬性。儘管看到我的日期和地點匹配返回true,但既沒有看到現有的作業,也看不到新創建的作業。
那麼我在這裏做錯了什麼?有沒有更好的方法讓這個刷新自動發生?感謝您能給予的任何幫助。
感謝您的快速回答。它看起來像預期的那樣工作,我的問題確實是Mirage沒有返回新數據。 一個問題:我是否還需要在我的路由中使用refresh(),否則這會自動更新而不刷新? – Granger44
無需刷新,新商品進入商店時會自動更新。 – Keo