Ember - 如何在保存/更新记录后重新加载路径模型

时间:2016-05-20 11:30:55

标签: ember.js ember-data

我想在route.js文件中保存/更新操作后重新加载我的路由模型。以下是我的路线模型。

export default Ember.Route.extend({

model() {
  return Ember.RSVP.hash({
        employeeList : this.store.findAll('employee'),
        employee : this.store.createRecord("employee"),
      });
}

我试过了,但它没有奏效。

this.refresh(); // I saw this in many posts.

有人可以建议如何在保存/更新操作后重新加载模型吗?

4 个答案:

答案 0 :(得分:2)

尝试使用store.push方法。

“push用于通知Ember Data存储在后端的新记录或更新记录。这将返回loaded.saved状态中的记录”

store.push(store.normalize('employee', savedEmployee));

更多:http://emberjs.com/api/data/classes/DS.Store.html#method_push

答案 1 :(得分:1)

您可以使用setupController hook来解决问题。

import Ember from 'ember';

export default Ember.Route.extend({

  model() {
    return Ember.RSVP.hash({
        employeeList : this.store.findAll('employee'),
        employee : this.store.createRecord("employee"),
    })

  setupController(controller, model) {
    controller.set('employeeList', model.employee);
  }
});

希望这能帮到你!!!

答案 2 :(得分:1)

我想知道这是不是时间问题。当我使用子路由时,新的记录在我的数据存储中出现了很多...即。 routes/employees.js返回this.store.findAll('employee')routes/employees/new.js返回this.store.createRecord('employee')

如果新路线不是一个选项,也许承诺会有所帮助吗?

export default Ember.Route.extend({

  model() {
    // forces a createRecord after the store is already loaded with all employees
    var newEmployeePromise = new Ember.RSVP.Promise((resolve, reject) => {
      let allEmployees = this.store.findAll('employee'); 
      allEmployees.then(() => {
        resolve(this.store.createRecord('employee')); 
      }, (error) => {
        reject(error); 
      });
    });

    return Ember.RSVP.hash({
      employeeList : this.store.findAll('employee'),
      employee : newEmployeePromise,
    });
  }
}

答案 3 :(得分:1)

通过this.store.createRecord()创建新记录,将自动更新商店,因此您无需刷新页面,因为它会自动更新ui。
如果你仍然需要更新页面,就像你说你可以调用this.refresh()..你可以查看twiddle

如果你为非工作提供余韵。这样会很好。