我正在处理的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