在实现 Falcor 数据源时,我很困惑为什么有时您可能会返回路径值的集合:
[{path, value}, {path, value}]
有时您必须以 jsonGraph 信封的形式提供返回值:
{jsonGraph: {something: {here: value}}}
我了解整个框架如何在 jsonGraph 的上下文中工作,但有时路径值的集合可以正常工作,有时则不能。也许我只是没有在路径值集合中正确表示更复杂的 jsonGraph 形状。
我天真的理解是路径值的集合被falcor解析为jsonGraph。但是我找不到关于此的任何文档。
如果有人能阐明何时使用相应的返回类型,或者路径值的确切集合表示为返回类型,我们将不胜感激。
跟进
我相信我的问题只是没有正确地以 pathValue 形式表达 JSONGraph。比如这个任意的JSONGraph结构是怎么用pathValues表达的?
{jsonGraph: {tasksById: {0: "taskA",
1: "taskB",
2: "taskC"}}}
我认为这只是 3 个路径值的平面集合,每个“任务”都有完整路径,但由于某种原因它一直在抛出错误。
[{path: ['tasksById', 0], value: "taskA"}, ...]
这是有效的 pathValue 等价物吗?
最佳答案
get
、set
和 call
的处理程序都应该接受 jsonGraph
或 数组>pathValues
(或包装其中任何一个的 promises 或 observables)。有 a reported bug使用 jsonGraph
使路径无效(还没有测试它是否仍然是一个问题),但除此之外,两者应该是等价的。我发现 pathValues
更容易表达,所以使用 jsonGraph
效果不佳。
正如您所指出的,无论您的处理程序返回什么,最终从数据源返回的始终是 jsonGraphEnvelope
包装 jsonGraph
,所以是的,如果您的处理程序返回 pathValues
,数据源处理到 jsonGraph
的转换。
sometimes collections of path values just work, and sometimes they don't
你能举个例子吗?可能是错误,也可能是格式错误的 pathValues
。
编辑
与您的示例几乎匹配的 get 处理程序的示例实现如下所示:
const RootRouter = Router.createClass([
{
route: 'tasksById[{integers:indices}]',
get: ({ indices }) => {
return indices.map((index) => ({
path: ['tasksById', index],
value: `task #${index}`,
}));
}
}
]);
const router = new RootRouter()
router.get([['tasksById', [0, 2]]])
.subscribe((data) => console.log(data));
// {"jsonGraph":{"tasksById":{"0":"task #0","2":"task #2"}}}
关于javascript - Netflix Falcor - 何时从数据源返回 pathValues 与 jsonGraph?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52467299/