DEBUG: -------------------------------
DEBUG: Ember : 2.2.0
DEBUG: Ember Data : 2.1.0
DEBUG: jQuery : 2.1.4
DEBUG: Model Fragments : 2.0.0
DEBUG: Ember Simple Auth : 1.0.0
DEBUG: -------------------------------
我的模型有一个计算属性upcomingReminders
,用于对DS.hasMany
属性进行筛选和排序,reminders
。
# app/models/job.js
import Ember from 'ember';
import DS from 'ember-data';
export default DS.Model.extend({
// ...
reminders: DS.hasMany( 'reminder', { "async": true } ),
undoneReminders: Ember.computed.filterBy('reminders', 'done', false),
upcomingReminders: Ember.computed.sort('undoneReminders', 'undoneSorting')
});
我在路由中创建一条新记录,如下所示:
# app/routes/dashboard/jobs/show/reminders/new.js
import Ember from 'ember';
export default Ember.Route.extend({
model() {
let newRecord = this.get('store').createRecord( 'reminder' , {
target: this.modelFor("dashboard.jobs.show")
});
return newRecord;
}
});
然后像这样从控制器中保存它:
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
save() {
this.get('model').save().then( (model) => {
let target = model.get('target');
this.transitionToRoute('dashboard.jobs.show.reminders', target );
});
}
}
});
模板如下所示:
<div class="valign-wrapper right">
{{#link-to "dashboard.jobs.show.reminders.new" model class="right"}}
{{md-btn text="Add Reminder" icon='mdi-content-add' class='green'}}
{{/link-to}}
</div>
{{#each model.upcomingReminders as |reminder|}}
{{reminder-widget reminder=reminder}}
{{else}}
There are no upcoming reminders
{{/each}}
{{outlet}}
当我保存模型时,它不会显示在列表中,直到我刷新页面,尽管它会立即显示在所有提醒的列表中,如果我更改每个块以迭代model.reminders
(原始DS.hasMany
属性,而不是排序和过滤属性(,它会显示在列表中。即使我导航到包含所有提醒列表的路线,然后返回,它也不会在那里,直到刷新后。
那么如何触发此计算属性的重新渲染呢?
确保reminder
模型中也有belongsTo('job')
。如果这还不能完成这项工作,请在控制器中尝试以下操作:
export default Ember.Controller.extend({
actions: {
save() {
this.get('model').save().then( (model) => {
let target = model.get('target');
this.get('store').find('job', model.get('job.id')).then((job) => {
job.get('reminders').pushObject(model);
this.transitionToRoute('dashboard.jobs.show.reminders', target)
});
});
}
}
});