【问题标题】:Nested routes — creating records that are async嵌套路由——创建异步记录
【发布时间】:2014-08-07 10:43:10
【问题描述】:

我有一个简单的 Ember 应用程序,其中包含 2 个相互关联的模型: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。有什么想法可能有问题吗?

【问题讨论】:

    标签: ember.js


    【解决方案1】:

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

    有两种方法可以解决这个问题:使用过滤器数组或手动更新数组。

    这是同一主题的问题链接:

    Ember template not updating from arraycontroller

    【讨论】:

    • 我一直坚持手动更新数组,尽管我不太喜欢这两种解决方案。我会将您的答案标记为已接受,直到出现更好的答案;-) 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多