Netflix Falcor - 何时从数据源返回 pathValues 与 jsonGraph?
Posted
技术标签:
【中文标题】Netflix Falcor - 何时从数据源返回 pathValues 与 jsonGraph?【英文标题】:Netflix Falcor - When to return pathValues versus jsonGraph from the data source? 【发布时间】:2019-02-27 06:07:13 【问题描述】:在实现 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 吗?
【问题讨论】:
【参考方案1】:get
、set
和call
的处理程序都应该接受jsonGraph
或pathValues
的数组(或包装其中任何一个的promise 或observables)。 a reported bug 使用 jsonGraph
使路径无效(尚未测试是否仍然是问题),但除此之外,两者应该是等价的。我发现pathValues
更容易表达,所以没有用jsonGraph
工作太多。
正如您所指出的,无论您的处理程序返回什么,最终从数据源返回的始终是 jsonGraphEnvelope
包装 jsonGraph
,所以是的,如果您的处理程序返回 pathValues
,数据源将处理转换为 @ 987654333@.
路径值的集合有时会起作用,有时则不起作用
你能举个例子吗?可能是错误,或者格式错误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"
【讨论】:
我认为问题只是用 pathValues 表达更复杂的 JSONGraph 形状。如果需要,您可以查看我在上面添加的编辑。但为了务实,我将使用 JSONGraph 文字样式来表达更复杂形状的样式。 @MFave 你的 pathValues 看起来正确。也许他们不匹配路线?例如类似tasksById[ranges:indices]
。以上是关于Netflix Falcor - 何时从数据源返回 pathValues 与 jsonGraph?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Jasmine 1 中监视 Falcor 数据模型构造函数