根据父路线制作子路线的模型查询 - 承诺?

时间:2015-09-07 16:39:57

标签: ember.js ember-data promise

我是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以根据类型进行搜索,并在不同的路线中显示不同的类型 - 但这是另一天。

0 个答案:

没有答案