Netflix Falcor - 何时 return pathValues 与数据源中的 jsonGraph?
Netflix Falcor - When to return pathValues versus jsonGraph from the data source?
在实施 Falcor 数据源时,我很困惑为什么有时您可能 return 路径值集合:
[{path, value}, {path, value}]
有时您必须提供 return 值作为 jsonGraph 信封:
{jsonGraph: {something: {here: value}}}
我了解整个框架在 jsonGraph 的上下文中是如何工作的,但有时路径值的集合可以正常工作,有时则不能。也许我只是没有在路径值集合中正确表示更复杂的 jsonGraph 形状。
我天真的理解是路径值的集合被falcor解析为jsonGraph。但是我找不到这方面的任何文档。
如果有人能阐明何时使用各自的 return 类型,或者路径值的确切集合表示为 return 类型,将不胜感激。
跟进
我相信我的问题只是没有正确地以 pathValue 形式表达 JSONGraph。比如这个任意的JSONGraph结构是怎么用pathValues表达的?
{jsonGraph: {tasksById: {0: "taskA",
1: "taskB",
2: "taskC"}}}
我认为这只是 3 个路径值的平面集合,每个路径值都有完整路径 "task",但由于某种原因它一直在抛出。
[{path: ['tasksById', 0], value: "taskA"}, ...]
这是等效的有效路径值吗?
get
、set
和 call
的处理程序都应该接受 jsonGraph
或 pathValues
的数组(或者 promises 或 observables 包装那些)。有 a reported bug 使用 jsonGraph
使路径无效(还没有测试看它是否仍然是一个问题),但除此之外,两者应该是等价的。我发现 pathValues
更容易表达,所以没有用 jsonGraph
.
如您所述,最终从数据源 return 编辑的始终是 jsonGraphEnvelope
包装 jsonGraph
,无论您的处理程序是什么 return,所以是的,如果您的处理程序 returns 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"}}}
在实施 Falcor 数据源时,我很困惑为什么有时您可能 return 路径值集合:
[{path, value}, {path, value}]
有时您必须提供 return 值作为 jsonGraph 信封:
{jsonGraph: {something: {here: value}}}
我了解整个框架在 jsonGraph 的上下文中是如何工作的,但有时路径值的集合可以正常工作,有时则不能。也许我只是没有在路径值集合中正确表示更复杂的 jsonGraph 形状。
我天真的理解是路径值的集合被falcor解析为jsonGraph。但是我找不到这方面的任何文档。
如果有人能阐明何时使用各自的 return 类型,或者路径值的确切集合表示为 return 类型,将不胜感激。
跟进
我相信我的问题只是没有正确地以 pathValue 形式表达 JSONGraph。比如这个任意的JSONGraph结构是怎么用pathValues表达的?
{jsonGraph: {tasksById: {0: "taskA",
1: "taskB",
2: "taskC"}}}
我认为这只是 3 个路径值的平面集合,每个路径值都有完整路径 "task",但由于某种原因它一直在抛出。
[{path: ['tasksById', 0], value: "taskA"}, ...]
这是等效的有效路径值吗?
get
、set
和 call
的处理程序都应该接受 jsonGraph
或 pathValues
的数组(或者 promises 或 observables 包装那些)。有 a reported bug 使用 jsonGraph
使路径无效(还没有测试看它是否仍然是一个问题),但除此之外,两者应该是等价的。我发现 pathValues
更容易表达,所以没有用 jsonGraph
.
如您所述,最终从数据源 return 编辑的始终是 jsonGraphEnvelope
包装 jsonGraph
,无论您的处理程序是什么 return,所以是的,如果您的处理程序 returns 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"}}}