Ember Route Promise - 这是我需要做的吗?

时间:2015-09-09 15:58:15

标签: ember.js promise

我有一条返回3个模型的路线。在路径返回模型之前,需要解析每个模型。我尝试使用以下模式(为了清晰起见,编辑了一些代码)

export default Ember.Route.extend({
   model: function(params, transition) {

    var _this = this;

    //Set up a hash to pass to RSVP. Ensures that permissions are returned BEFORE outlet and account query
    var getPermissions = {

        permission : this.store.query('permission',query).then(function(permissions){

            var outlets = _this.store.findByIds('outlet', permissions.map REDACTED);

            var accounts = _this.store.findByIds('account', permissions.map REDACTED);

            var result = {permissions, accounts, outlets};

            return result;

        })


    };          

    return Ember.RSVP.hash(getPermissions); 
 }

});

到目前为止,我的所有模型都已在商店中正确填充,但我在控制器中的帐户和插座模型中访问属性时遇到问题,但UI会毫无问题地呈现这些项目。< / p>

我猜这个承诺没有做我想要的,这是为了确保在返回模型之前所有模型都可用。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

  

到目前为止,我的所有模型都正确填充了   存储,但我在访问帐户中的属性时遇到问题   和我的控制器中的插座模型,但UI呈现这些项目   没有问题。

accountsoutlets存在问题,因为Ember.RSVP.hash解析后this.store.query('permission', query)已解决。

确保在Ember.RSVP.hash解决后将所有承诺传递给permissions

export default Ember.Route.extend({
    model(params, transition) {   

        return new Promise((resolve) => {
            this.store.query('permission', query).then((permissions) => {
                let outlets  = this.store.findByIds('outlet', permissions.map REDACTED),
                    accounts = this.store.findByIds('account', permissions.map REDACTED);

                resolve(Ember.RSVP.hash({
                    outlets:     outlets,
                    accounts:    accounts,
                    permissions: permissions
                }));
            });
        });
    }
});