Ember Route Promise - 这是做我需要的吗? [英] Ember Route Promise - Is this doing what I need?

查看:146
本文介绍了Ember Route Promise - 这是做我需要的吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一条路线可以返回3个模型。在路由返回模型之前,需要解决每个模型。我尝试使用以下模式(一些编码以帮助清晰的代码)

 导出默认值Ember.Route.extend({ 
model:function(params,transition){

var _this = this;

//设置一个散列传递给RSVP确保返回权限在出口和帐户查询之前
var getPermissions = {

权限: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;

})


} ;

返回Ember.RSVP.hash(getPermissions);
}

});

这个工作到目前为止,所有的模型都正确地在商店中填充,但是我有在控制器中的帐户和插座模型中访问属性的问题,但UI会呈现这些项目,而不会出现问题。



我猜这个承诺不是在做什么想要,这是确保在模型返回之前所有型号都可用。



任何帮助将不胜感激!

解决方案


这个工作到目前为止,所有的模型都正确地填充在
存储中,但是我有访问属性的问题在帐户
和我的控制器中的插座模型中,但UI会呈现这些项目
,而不会出现问题。


您有问题帐户出口,因为 Ember.RSVP.hash this.store.query('permission',query)时解决解析。



确保将所有承诺传递到 Ember.RSVP.hash 之后权限已解决:

 导出默认值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,
帐户:帐户,
权限:权限
}));
});
});
}
});


I have a route that returns 3 models. Each model needs to be resolved before the route returns the models. I've attempted this using the following pattern (some code redacted to aid clarity)

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); 
 }

});

This works in so far that all my models are correctly populated in the store, but I'm having issues with accessing attributes in the accounts and outlets models in my controller, but the UI renders these items without issue.

I'm guessing that this promise is not doing what I want, which is to ensure that ALL models are available before the models are returned.

Any help would be much appreciated!

解决方案

This works in so far that all my models are correctly populated in the store, but I'm having issues with accessing attributes in the accounts and outlets models in my controller, but the UI renders these items without issue.

You have issues with accounts and outlets, because Ember.RSVP.hash is resolved when this.store.query('permission', query) resolves.

Make sure you pass all promises to Ember.RSVP.hash after permissions is resolved:

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
                }));
            });
        });
    }
});

这篇关于Ember Route Promise - 这是做我需要的吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆