将多个 Falcor 数据源组合成单个模型
Posted
技术标签:
【中文标题】将多个 Falcor 数据源组合成单个模型【英文标题】:Combining Multiple Falcor Data Sources into Single Model 【发布时间】:2018-08-28 22:20:55 【问题描述】:修改问题以便更好地解释:
我有两个来自两个不同 HttpDataSource 的 Falcor 模型,如下所示:
第一个模型(用户模型):
const user_model = new falcor.Model(
source: new HttpDataSource('http://localhost:3000/api/userManagement')
);
user_model.get(['user', 'list'])
输出1:
"jsonGraph":
"user":
"list":
"$type": "atom",
"value":
"users": [...]
第二个模型(角色模型):
const role_model = new falcor.Model(
source: new HttpDataSource('http://localhost:3000/api/roleManagement')
);
role_model.get(['role', 'list'])
输出2:
"jsonGraph":
"role":
"list":
"$type": "atom",
"value":
"roles": [...]
有没有办法将所有这些 Falcor 模型组合成一个模型?
目的是,如果我尝试执行 user_model.get(['user', 'list']) 不止一次,它会从 Falcor-Model-Cache 获取数据(在第一次从 DB 获取之后)。
但如果我尝试执行 role_model.get(['user', 'list']),那么我必须再次访问数据库以获取数据(以便将相同的用户列表存储在 role_model 缓存中)。
所以如果有如下方法:
all_model = user_model + role_model
然后我可以做 all_model.get(['user', 'list']) (或) all_model.get(['role', 'list'])。所以基本上我在浏览器端只有一个 Falcor-Model-Cache 组合。
希望现在问题更清楚了。
【问题讨论】:
每个源的 graphJSON 是什么样的?您是想跨每个合并 keySet(可能更难),还是它们彼此脱节(可能更容易)? 【参考方案1】:你必须使用 forkJoin
forkJoin(model1.source,model2.source).subscribe(res=>
//in res[0] you have the response of model1.source
//in res[1] you have the response of model2.source
let data=...res[0],...res[1]
//in data you have all the properties
【讨论】:
我相信你所说的只是结合所有 falcor 模型调用的结果(即)只是数据。但是组合的 Falcor 数据源应该用于后续的数据调用,如果数据已经存在于 Falcor 模型缓存中,则将从那里而不是从 Api 调用提供数据。以上是关于将多个 Falcor 数据源组合成单个模型的主要内容,如果未能解决你的问题,请参考以下文章
使用 PHP 将多个 SQL 列组合成 HTML 表的单个列