gpt4 book ai didi

javascript - 返回模型之前的 EmberJS 处理

转载 作者:行者123 更新时间:2023-12-03 08:40:12 24 4
gpt4 key购买 nike

在将 ember 模型返回到钩子(Hook)中之前,如何对其进行处理?我目前在 route 有以下内容

model: function (params) {
var list_of_modelAs = [];

this.store.find('modelA').then(function (modelAs) {
modelAs.forEach ( function (modelA) {
modelA.get('modelB').then(function(modelB) {
if (modelB.get('id') == params.modelB_id) {
list_of_modelAs.push(modelA)
}
})
})
});

return list_of_modelAs;
}

其中 modelA 和 modelB 当然是使用 Ember-Data 定义的模型。

我本质上是在创建一系列模型,但首先对它们进行过滤。实际上我想做的只是过滤模型数组,但我想不出另一种方法来做到这一点,因为 modelB 是一个外国模型(modelA属于modelB,即每个 modelA 都有一个 modelB)。理想情况下,我想做的是:

返回 this.store.find('modelA', where modelA.modelB.id = someValue)

问题当然是,由于 Promise 等原因,仅返回一个空的 list_of_modelAs 并且模型显示为空。

我认为我必须以某种方式构造它才能从模型 Hook 返回 promise ,但我不太确定如何。

最佳答案

return a promise from the model hook

由于我对 ember 几乎一无所知,我只能推测上述内容就是您想要实现的目标 - 这将实现该目标

model: function (params) {
return this.store.find('modelA') // important you do a return here, to return the promise
.then(function (modelAs) { // modelAs is an array of modelA - we can use map to change this to an array of modelA.get('modelB') promises
return Promise.all(modelAs.map(function (modelA) { // Promise.all resolves when the array of promises resolves, it resolves to an array of results
return modelA.get('modelB').then(function (modelB) { // just do the asynch stuff here, return modelA if the id is OK, otherwise return null which will be filtered out later
if (modelB.get('id') == params.modelB_id) {
return modelA;
}
else {
return null;
}
});
}));
})
.then(
function(data) { // data is an array of values returned from Promise.all - filter out the null values as they are the ones that don't have the correct ModelB id
return data.filter(function(datum) {
return datum !== null;
});
}
);
// the final return value will be a promise of an array of ModelA whose ModelB has the required `id`
}

使用调用

???.model(params)
.then(function(modelAs) {
// NOTE: modelAs is an array of modelA's not promises
});

关于javascript - 返回模型之前的 EmberJS 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33059620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com