Ember数据同步使用hasMany

时间:2016-04-04 13:56:58

标签: javascript ember.js ember-data

我有一个hasMany关系的嵌套路由。我已经用这种方式宣布了模型:

export default DS.Model.extend({
    label: DS.attr('string'),
    archetyp: DS.attr('number'),
    searchable: DS.attr('boolean'),
    showInList: DS.attr('boolean'),
    managedItem: DS.belongsTo('managedItem')
});

相应的模型如下:

export default DS.Model.extend({
  title: DS.attr('string'),
  description: DS.attr('string'),
  logo: DS.attr('string'),
  logo_alt: DS.attr('string'),
  fields: DS.hasMany('field', {async: true})
});

在字段/索引路由中,我想从服务器加载字段。因此,我已经迷上了模型钩子。

export default Ember.Route.extend({
  model() {
    let fields = this.modelFor('managedItems/edit').get('fields');
    if (fields.get('isFulfilled')) {
      fields.reload();
    }
    return fields;
  }
});

但是我看不到任何网络请求,如果我尝试console.log(字段),我看到模型是空的。我在这里想念什么?

编辑:作为附加信息:如果我只是调用this.modelFor(“managedItems / edit”)并询问模型对象的某些属性,除了isLoaded属性外,我总是得到未定义...
这是路由器:

Router.map(function() {
  this.route('managedItems', {
  }, function() {
    this.route('new');
    this.route('show', {path: ':managedItem_id'});
    this.route('edit', {path: ':managedItem_id/edit' },
      function() {
           this.route('fields', { resetNamespace: true }, function () {
         });
      });
    });
});

2 个答案:

答案 0 :(得分:0)

路线中的模型钩子在任何情况下都应该返回Promise。你尝试过类似的东西吗?

export default Ember.Route.extend({
    model() {
        return this.modelFor('managedItems/edit').get('fields');
    }
});

答案 1 :(得分:0)

managedItems/edit更改为managedItems.edit,如下所示:

let fields = this.modelFor('managedItems.edit').get('fields');

managedItems / edit ”是路径的路径(如果不覆盖它)。路线的名称是“ managedItems.edit ”。

此外,fields.reload();正在返回一个承诺。我不确定IMO正确的模型钩子函数是这样的:

export default Ember.Route.extend({
  model() {
    let fields = this.modelFor('managedItems.edit').get('fields');
    if (fields.get('isFulfilled')) {
      return fields.reload(); //You should return this promise.
    }
    return fields;
  }
});