Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 创建新记录时,如何使基于DS.hasMany属性的余烬计算数组更新?_Ember.js_Ember Data - Fatal编程技术网

Ember.js 创建新记录时,如何使基于DS.hasMany属性的余烬计算数组更新?

Ember.js 创建新记录时,如何使基于DS.hasMany属性的余烬计算数组更新?,ember.js,ember-data,Ember.js,Ember Data,我的模型有一个计算属性上传提醒,用于过滤和排序DS。有许多属性,提醒 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: ----

我的模型有一个计算属性
上传提醒
,用于过滤和排序
DS。有许多
属性,
提醒

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: -------------------------------
我在路线中创建了一个新记录,如下所示:

# 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 );
      });
    }
  }
});

{{{#链接到“dashboard.jobs.show.members.new”model class=“right”}
{{md btn text=“添加提醒”icon='mdi-content-Add'class='green'}
{{/链接到}
{{{#每个模型。将提醒作为{提醒}}
{{提醒小部件提醒=提醒}
{{else}
没有即将发布的提醒
{{/每个}}
{{outlet}}
当我保存模型时,在刷新页面之前,它不会显示在列表中,尽管它会立即显示在所有提醒的列表中,如果我将每个块更改为迭代
model.members
(原始
DS.hasMany
属性,而不是排序和筛选属性),它会显示在列表中。即使我导航到一个包含所有提醒列表的路线,然后返回,它在刷新后才会出现


那么,如何触发此计算属性的重新加载程序呢?

请确保您的
提醒
模型中还有一个
belongsTo('job')
。如果这还不能完成任务,请在控制器中尝试以下操作:

<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}}

可能CP没有看到属性更新。您可以尝试直接调用
notifyPropertyChange
,通知观察者(您的CP)在保存时属性已更新。您需要手动将新提醒添加到作业的
提醒
集合中。
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)
                 });
              });
         }
       }
 });