【问题标题】:Combining Multiple Falcor Data Sources into Single Model将多个 Falcor 数据源组合成单个模型
【发布时间】: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(可能更难),还是它们彼此脱节(可能更容易)?

标签: falcor


【解决方案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 调用提供数据。
猜你喜欢
  • 2017-08-26
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多