【问题标题】:Ember - How to reload route model after save/update recordsEmber - 如何在保存/更新记录后重新加载路线模型
【发布时间】:2016-05-20 11:30:54
【问题描述】:

我想在 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.

谁能建议在保存/更新操作后如何重新加载模型?

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    尝试使用 store.push 方法。

    "push 用于通知 Ember Data 的 store 后端存在新的或更新的记录。这将返回处于 loaded.saved 状态的记录"

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

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

    【讨论】:

      【解决方案2】:

      我想知道这是否是一个时间问题。当我使用子路由时,新记录显示在数据存储中对我来说非常棒......即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】:

        您可以使用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);
          }
        });
        

        希望对你有帮助!!!

        【讨论】:

          【解决方案4】:

          通过this.store.createRecord()创建新记录,会自动更新store,所以不需要刷新页面,会自动更新ui。
          如果你仍然需要更新页面,就像你说的,你可以调用 this.refresh().. 你看看twiddle

          如果你为非工作提供 ember-twiddle 会很好。

          【讨论】:

            猜你喜欢
            • 2015-03-14
            • 1970-01-01
            • 2012-12-20
            • 2018-02-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-04-20
            • 1970-01-01
            相关资源
            最近更新 更多