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"}, ...]

这是等效的有效路径值吗?

getsetcall 的处理程序都应该接受 jsonGraphpathValues 的数组(或者 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"}}}