Netflix Falcor:模型获取操作中的过滤器
Netflix Falcor: Filters in model's get operation
我们正在尝试将 Netflix's Falcor 集成到我们的系统中。
我们如何根据过滤器检索路径。例如,如果我们想要获得具有 done: false
值的待办事项。
JSON 图形示例:
{
todosById: {
"44": {
name: "Login to Whosebug",
done: true,
prerequisites: []
},
"54": {
name: "Ask question on Whosebug",
done: false,
prerequisites: [{ $type: "ref", value: ["todosById", 54] }]
},
"64": {
name: "Accept answer",
done: false,
prerequisites: []
}
},
todos: [
{ $type: "ref", value: ["todosById", 44] },
{ $type: "ref", value: ["todosById", 54] },
{ $type: "ref", value: ["todosById", 64] }
]
}
现在我们只想获取尚未 done: true
的待办事项。
在客户端获取所有待办事项和过滤似乎是多余的。我假设我们可能需要使用 call
操作,但我在指南中找不到任何关于如何在 JSON 图中实现函数的示例。 (也不知道有没有更好的办法)
将您的模型视为包含客户可能要求的所有内容,而不仅仅是存储的数据。这就是你想要的:
{
todosByDone: {
"true": [
{ $type: "ref", value: ["todosById", 44] }
],
"false": [
{ $type: "ref", value: ["todosById", 54] },
{ $type: "ref", value: ["todosById", 64] }
]
},
todosById: {
"44": {
name: "Login to Whosebug",
done: true,
prerequisites: []
},
"54": {
name: "Ask question on Whosebug",
done: false,
prerequisites: [{ $type: "ref", value: ["todosById", 54] }]
},
"64": {
name: "Accept answer",
done: false,
prerequisites: []
}
},
todos: [
{ $type: "ref", value: ["todosById", 44] },
{ $type: "ref", value: ["todosById", 54] },
{ $type: "ref", value: ["todosById", 64] }
]
}
然后您可以像任何其他数组一样请求已完成的待办事项:todosByDone.true[0..10]
。当然,您可以根据需要设计模型,并且有很多可能性。从客户的角度考虑建模。例如,如果客户端可以执行 todos.done
和 todos.todo
(又名未完成),那就太好了。然后你的模型看起来像:
{
todos: {
done: [
{ $type: "ref", value: ["todos", "byId", 44] }
],
todo: [
{ $type: "ref", value: ["todos", "byId", 54] },
{ $type: "ref", value: ["todos", "byId", 64] }
],
byId: {
"44": {
name: "Login to Whosebug",
done: true,
prerequisites: []
},
"54": {
name: "Ask question on Whosebug",
done: false,
prerequisites: [{ $type: "ref", value: ["todos", "byId", 54] }]
},
"64": {
name: "Accept answer",
done: false,
prerequisites: []
}
},
byCreationTime: [
{ $type: "ref", value: ["todos", "byId", 44] },
{ $type: "ref", value: ["todos", "byId", 54] },
{ $type: "ref", value: ["todos", "byId", 64] }
]
},
}
欢迎探索 this app 示例。
我们正在尝试将 Netflix's Falcor 集成到我们的系统中。
我们如何根据过滤器检索路径。例如,如果我们想要获得具有 done: false
值的待办事项。
JSON 图形示例:
{
todosById: {
"44": {
name: "Login to Whosebug",
done: true,
prerequisites: []
},
"54": {
name: "Ask question on Whosebug",
done: false,
prerequisites: [{ $type: "ref", value: ["todosById", 54] }]
},
"64": {
name: "Accept answer",
done: false,
prerequisites: []
}
},
todos: [
{ $type: "ref", value: ["todosById", 44] },
{ $type: "ref", value: ["todosById", 54] },
{ $type: "ref", value: ["todosById", 64] }
]
}
现在我们只想获取尚未 done: true
的待办事项。
在客户端获取所有待办事项和过滤似乎是多余的。我假设我们可能需要使用 call
操作,但我在指南中找不到任何关于如何在 JSON 图中实现函数的示例。 (也不知道有没有更好的办法)
将您的模型视为包含客户可能要求的所有内容,而不仅仅是存储的数据。这就是你想要的:
{
todosByDone: {
"true": [
{ $type: "ref", value: ["todosById", 44] }
],
"false": [
{ $type: "ref", value: ["todosById", 54] },
{ $type: "ref", value: ["todosById", 64] }
]
},
todosById: {
"44": {
name: "Login to Whosebug",
done: true,
prerequisites: []
},
"54": {
name: "Ask question on Whosebug",
done: false,
prerequisites: [{ $type: "ref", value: ["todosById", 54] }]
},
"64": {
name: "Accept answer",
done: false,
prerequisites: []
}
},
todos: [
{ $type: "ref", value: ["todosById", 44] },
{ $type: "ref", value: ["todosById", 54] },
{ $type: "ref", value: ["todosById", 64] }
]
}
然后您可以像任何其他数组一样请求已完成的待办事项:todosByDone.true[0..10]
。当然,您可以根据需要设计模型,并且有很多可能性。从客户的角度考虑建模。例如,如果客户端可以执行 todos.done
和 todos.todo
(又名未完成),那就太好了。然后你的模型看起来像:
{
todos: {
done: [
{ $type: "ref", value: ["todos", "byId", 44] }
],
todo: [
{ $type: "ref", value: ["todos", "byId", 54] },
{ $type: "ref", value: ["todos", "byId", 64] }
],
byId: {
"44": {
name: "Login to Whosebug",
done: true,
prerequisites: []
},
"54": {
name: "Ask question on Whosebug",
done: false,
prerequisites: [{ $type: "ref", value: ["todos", "byId", 54] }]
},
"64": {
name: "Accept answer",
done: false,
prerequisites: []
}
},
byCreationTime: [
{ $type: "ref", value: ["todos", "byId", 44] },
{ $type: "ref", value: ["todos", "byId", 54] },
{ $type: "ref", value: ["todos", "byId", 64] }
]
},
}
欢迎探索 this app 示例。