在我的路线上我通过ember-data请求一些记录。可以说模型类型是' item'。
model: function(){
return this.get('store').find('item');
}
现在我有了一个名为' my-foo' 的组件,它应该使用这些记录来处理数据。因此,我这样调用组件:
{{my-foo myItems=model}}
在我的路线模板中。在组件js部分中,我试图获取myItems-field并迭代它们。
this.get('myItems').forEach(...);
不幸的是,如果我想要覆盖组件的模型是来自记录或只是单个记录的集合(因为在某些路线上模型是其他result of store.find('item')
上的store.find('item', 23424)
,我不清楚它
如何查看组件中的数据类型。
(我也想知道自从使用ember-data以来它是什么类型的对象。此时它是DS.recordarray还是承诺还是别的什么?)
答案 0 :(得分:2)
我可以看到问题的两个解决方案:
至于了解组件 - 您可以选择2种方法。要么区分你的组件如何获取参数,所以可能有:
{{my-foo myItems=model}}
- 当您希望收到多件物品时{{my-foo item=model}}
- 当您希望收到单一然后相应地进行相应的工作,或者 - 第二种方法 - 实际上是拆分组件(同时将共享部件提取到不同的结构),因此您对单个项目my-foo
和my-foo-array
数倍。
这种方法的优点在于您不会处理 what-if-multiple 逻辑,这可能会在以后变得无法管理,但使用它依赖于项目要求。
至于检查和/或调整 - 您已经有数据,因此可以假设您的数据很脏并使用computed property清理它。下面的例子中,单个项目被包装成一个数组。
export default Ember.Component.extend({
sanitizedItems: Ember.computed('items', function() {
var items = this.get('items');
if(!Array.isArray(items)) {
return [items];
} else {
return items;
}
})
});
由于您正在使用Ember.Data
,因此根据您的设置,您可能会获得承诺而不是对象/数组。在这种情况下,您可能希望在进行清理之前使用this.get('items').then(function(items) { ... })
来解决承诺,但背后的想法完全相同。