我是Ember的新手并且陷入困境!我有一个子路由,需要等待父路由返回它的记录集。然后子路由需要为父路由中返回的所有键执行findByIds(父路径返回许多键)。我的孩子路线看起来像这样:
export default Ember.Route.extend({
model: function(params, transition) {
var allPermissions = Ember.ArrayProxy.create({ content: this.modelFor('permissions') });
return this.store.findByIds('outlet', allPermissions.map(function(item, index, enumerable){
console.log('in map');
return item.get('howya_system_key');
}));
}
});
我在这里尝试做的是获取所有父路由记录,然后在返回的每个父ID上返回findByIds的结果。
当我转换到路由时,它没有错误,并且console.log没有输出。我认为我的问题是新的ArrayProxy还没有被执行findByIds创建,所以allPermissions.map没有任何东西可以迭代。
我猜我需要通过Promise实现这一点,虽然我无法理解我是如何做到的。任何人都可以指出我正确的方向吗?
非常感谢。
更新:
我想我已经知道如何做到这一点,但我不确定我是否正在做这个' Ember'办法。我已经添加了一个承诺,我的路线现在看起来像这样:
export default Ember.Route.extend({
model: function(params, transition) {
var _this = this;
return new Ember.RSVP.Promise(function(resolve) {
resolve( _this.store.findByIds('outlet', _this.store.peekAll('permission').map(function(item, index, enumerable){
console.log(item.get('howya_system_key'));
return item.get('howya_system_key');
})))
});
}
});
问题是,有没有更好的方法,并且是“偷看”'最好的事情是使用或者我最终会查看模型的所有商店记录,而不仅仅是存储与父路径查询相关的模型的记录?
更新
好的,解决了这个问题。无法使用下面建议的关系,因为父键可以根据类型指向不同的表。
解决方案是使用上面定义的promise,但使用:
_this.modelFor(' ROUTE_NAME&#39)。映射
而不是:
_this.store.peekAll(' MODEL_NAME&#39)。映射
我还需要过滤ID以根据类型进行搜索,并在不同的路线中显示不同的类型 - 但这是另一天。