首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使基于DS.hasMany属性的Ember计算数组在创建新记录时更新?

问如何使基于DS.hasMany属性的Ember计算数组在创建新记录时更新?
EN

Stack Overflow用户
提问于 2015-12-21 08:31:25
回答 1查看 157关注 0票数 0
代码语言:javascript
复制
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进行过滤和排序。

代码语言:javascript
复制
# 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')
});

我在路由中创建了一个新记录,如下所示:

代码语言:javascript
复制
# 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;
  }
});

然后从控制器保存它,如下所示:

代码语言:javascript
复制
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 );
      });
    }
  }
});

模板如下所示:

代码语言:javascript
复制
<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属性,而不是sorted & filtered属性),它就会显示在列表中。即使我导航到具有所有提醒列表的路由,然后返回,它也不会出现,直到刷新之后。

那么,如何触发此计算属性的重新呈现呢?

EN

回答 1

Stack Overflow用户

发布于 2015-12-21 16:08:46

确保您的reminder模型中也有一个belongsTo('job')。如果还不能完成这项工作,请在控制器中尝试执行以下操作:

代码语言:javascript
复制
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)
                 });
              });
         }
       }
 });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34387489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档