Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 检查余烬数据中是否存在belongsTo()关系_Ember.js_Ember Data - Fatal编程技术网

Ember.js 检查余烬数据中是否存在belongsTo()关系

Ember.js 检查余烬数据中是否存在belongsTo()关系,ember.js,ember-data,Ember.js,Ember Data,我有一个名为List的模型,它表示一个导航树。我应该能够导航到子列表,然后点击后退按钮返回到父列表 import DS from 'ember-data'; export default DS.Model.extend({ title: DS.attr('string'), children: DS.hasMany('list', { inverse: 'parent' }), parent: DS.belongsTo('list', { inverse: 'children'

我有一个名为List的模型,它表示一个导航树。我应该能够导航到子列表,然后点击后退按钮返回到父列表

import DS from 'ember-data';

export default DS.Model.extend({
  title: DS.attr('string'),

  children: DS.hasMany('list', { inverse: 'parent' }),
  parent: DS.belongsTo('list', { inverse: 'children' }) 
});
我通过查找没有父级的列表来确定路由文件中的“根”级列表

import Ember from 'ember';

export default Ember.Route.extend({

  model(){
    return this.store.findAll('list').then(function(lists){
      return lists.filter(function(list){
        if(Ember.isEmpty(list.get('parent').get('content'))) {
          return true;
        } 
        else {
          return false;
        }
      }).get('firstObject');
    }); 
  }
});
我觉得我的实现有很多地方是错误的,即使它可以在初始页面加载时工作

  • Ember.isEmpty(list.get('parent').get('content'))
    检查父关系的存在似乎完全是错误的
  • 我觉得我可能没有正确过滤整个列表集合。我有意调用索引API请求,以便加载所有列表,但当我导航到子列表并点击后退按钮时,会再次发出XHR请求
  • 在此基础上,过滤只对初始页面加载有效。如果我进入一个列表,然后点击后退按钮,子列表将保留在页面上(没有错误或任何东西!)
检查父关系是否存在的正确方法是什么

另外,过滤整个列表以查找一条记录的正确方法是什么


我的无知是导致“后退”按钮出现问题的原因吗?

如果没有相关记录,则相应的属性应为
null
。因此,您可以像这样简化代码:

import Ember from 'ember';

export default Ember.Route.extend({

  model(){
    return this.store.findAll('list').then(function(lists){
      return lists.findBy('parent', null);
    }); 
  }

});
如果需要缓存模型数据以避免命中服务器,还可以添加:

import Ember from 'ember';

export default Ember.Route.extend({

  parentModel: null,

  model(){
    var _this = this;  
    return this.parentModel || this.store.findAll('list').then(function(lists){
      _this.parentModel = lists.findBy('parent', null);
      return _this.parentModel;
    }); 
  }

});

由于Ember Data 2.5,可以使用新的引用API检查是否存在belongsTo关系。
您只需检查obj.belongsTo('relation').id()是否为空

在OP的例子中,它将变成:

import Ember from 'ember';

export default Ember.Route.extend({

  model(){
    return this.store.findAll('list').then(function(lists){
      return lists.filter(function(list){
        if(list.belongsTo('parent').id() === null) {
          return true;
        } 
        else {
          return false;
        }
      }).get('firstObject');
    }); 
  }
});
还可以检查关系是否已加载、手动加载、重新加载以及其他一些很酷的事情。
查看以了解更多详细信息。

Ember.isEmpty(list.get('parent')。get('content'))您可以转到ParentExists:Ember.computed.notEmpty(xx)