Ember.js 检查余烬数据中是否存在belongsTo()关系
我有一个名为List的模型,它表示一个导航树。我应该能够导航到子列表,然后点击后退按钮返回到父列表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'
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)