嵌套路由 - 创建异步记录

时间:2014-08-07 10:43:11

标签: ember.js

我有一个简单的Ember应用,其中有两个相互关联的模型:parentrecord

// parent model
export default DS.Model.extend({
  records: DS.hasMany('records', { async: true })
});

// record model
export default DS.Model.extend({
  parent: DS.belongsTo('parent')
});

记录路由嵌套在父路由下,父模板包含link-to条记录和outlet以呈现内容。记录模板包含简单的{{#each}}循环。

以下是负责设置模型的记录索引路径:

// records index route
export default Ember.Route.extend({
  model: function() {
    return this.modelFor('parent').get('records');
  }
});

当我加载parent/records路由时,所有记录加载/渲染都很好。当我尝试创建新记录时,问题就出现了;我在记录索引控制器中做了什么:

// records index controller
export default Ember.ArrayController.extend({
  needs: ['parent'],

  actions: {
    createRecord: function() {
      var newRecord = this.store.createRecord('record', {
        parent: this.get('controllers.parent.model')
      });

      newRecord.save();
    }
  }
});

创建新记录后,它不会出现在我的记录索引模板中。如果我打开Ember检查器,我可以看到那里的记录,它甚至分配了正确的父记录。

以下是我在创建记录后从服务器获得的答案:

{ "record": { "id": 1, "parent_id": 1 }}

我认为问题的发生是因为记录索引路由或来自服务器的响应;如果我改变这样的路线,新的记录会在创建后按预期显示(虽然这不是我想要的;我只想要属于父记录的记录):

// records index route
export default Ember.Route.extend({
  model: function() {
    return this.store.find('record');
  }
});

我在Ember 1.6.1和Ember Data beta 8.任何想法可能出错?

1 个答案:

答案 0 :(得分:0)

你是对的,你的索引路线会抓取一个模型数组 - 它不知道它们已被更新或删除。

有两种方法可以解决此问题:使用过滤器阵列或手动更新阵列。

以下是关于同一主题的问题链接:

Ember template not updating from arraycontroller