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

时间:2016-06-17 01:47:38

标签: falcor falcor-router

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

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

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

是否有一种简短的方法可以使一个类别中的所有文章无效,或者我是否需要明确地使article下的每个categoriesById无效,或者,是否有办法拼接一个项目进入JSONGraph的列表?

2 个答案:

答案 0 :(得分:2)

您可以使用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 tu返回有关新创建文章或更新文章数量的更多信息。在这里它只返回整个articles数组必须从客户端的缓存中删除的事实。要返回更多信息,可以向返回的数组添加路径/值对。

答案 1 :(得分:0)

您可以将集合根目录的路径指定为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