在实现Falcor数据源时,我对为什么有时返回路径值的集合感到困惑:

[{path, value}, {path, value}]


有时您必须提供返回值作为jsonGraph信封:

{jsonGraph: {something: {here: value}}}


我了解整个框架是如何在jsonGraph的上下文中工作的,但是有时路径值的集合会起作用,有时却不起作用。也许我只是在路径值集合中无法正确表示更复杂的jsonGraph形状。

我的天真理解是,falcor将路径值的集合解析为jsonGraph。但是我找不到任何文档。

如果任何人都可以澄清何时使用各自的返回类型,或者路径值的确切集合表示为返回类型,将不胜感激。

跟进

我相信我的问题只是无法正确以pathValue形式表达JSONGraph。例如,如何用pathValues表示此任意JSONGraph结构?

{jsonGraph: {tasksById: {0: "taskA",
                         1: "taskB",
                         2: "taskC"}}}


我以为这将是3个路径值的平面集合,其中包含每个“任务”的完整路径,但由于某种原因,它会不断抛出。

[{path: ['tasksById', 0], value: "taskA"}, ...]


这是等效的有效pathValue吗?

最佳答案

getsetcall的处理程序都应接受jsonGraphpathValues的数组(或包含其中任何一个的promise或observables)。有a reported bug使用jsonGraph来使路径无效(尚未测试过是否仍然是问题),但是除此之外,两者应该等效。我发现pathValues更易于表达,因此在jsonGraph方面工作不多。

如您所述,无论处理程序返回什么内容,最终从数据源返回的内容始终是jsonGraphEnvelope包装jsonGraph,因此,是的,如果处理程序返回pathValues,则数据源将处理转换为jsonGraph的情况。


  有时路径值的集合起作用,而有时却不起作用


你能给我举个例子吗?可能是错误,或者是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/

10-08 22:08