你如何使 Falcor 中的整个范围无效?

How do you invalidate a whole range in Falcor?

假设我有一个简单的类别和文章系统,并且有一个像这样的路径来获取特定类别中所有文章的列表。

categoriesById[{integers:ids}].articles[{ranges:rows}]

现在,该路由被硬编码为先按最新文章排序,因此当我添加新文章时,我需要(我假设)使一个类别中的所有文章无效,因为我想要文章 0 成为新文章。

是否有一种快捷方式可以使一个类别中的整个文章范围无效,或者我是否需要明确地使 categoriesById 下的每个 article 无效,或者,有没有办法将项目拼接到 JSONGraph 中的列表中?

您可以将集合的根路径提供给invalidate

var model = new falcor.Model({
  cache: {users: [{name: "Scott"}]}
})

console.log(model.getCache().users) // Object {0: Object, length: Object}
model.invalidate("users")
console.log(model.getCache().users) // undefined

Fiddle

您可以使用 range object.

call(path, arg, refPaths, thisPaths) {
    // add new article
    const newLength = // get new length somehow
    return [
        {
            path: [
                "categoriesById", 
                path.categoryId, 
                "articles",
                {length: newLength}
            ],
            invalidated: true
        }
    ]
}

请注意,您可能希望 call 了解 return 有关新创建的文章或更新的文章数量的更多信息。这里 return 只是必须从客户端缓存中删除整个 articles 数组这一事实。要 return 更多信息,您可以将 path/value 对添加到 returned 数组。