如何构造 falcor 路由器以获取所有可用的 ID?

How to structure falcor router to get all available IDs?

我正在尝试使用 Falcor 来显示 Guild Wars 2 API 并希望用它来显示游戏项目的详细信息。我对构建一个可以使用多个数据源来组合不同 API 的结果的路由器特别感兴趣。

要注意的是,激战 2 中的 Item IDs 并不连续。这是一个例子:

[
    1,
    2,
    6,
    11,
    24,
    56,
    ...
]

所以我不能像 items[100..120].name 那样只在客户端上写路径,因为几乎肯定会在该列表中出现一堆漏洞。

我已经尝试向我的路由器添加一条路由,这样我就可以请求 items,但这会将它发送到客户端的无限循环中。你可以看到那个尝试 on GitHub.

有没有关于构建此结构的正确方法的指示?当我考虑更多时,也许我想要 item.id

您不应该发现自己从 Falcor JSON Graph 对象中请求 ID。

您似乎想要构建一个游戏 ID 数组:

{
    games: [
        { $type: "ref", value: ["gamesById", 352] },
        { $type: "ref", value: ["gamesById", 428] }
        // ...
    ],
    gamesById: {
        352: {
            gameProp1: ...,
        },
        428: {
            gameProp2: ...
        }
    }
}

[games, {from: 5, to: 17 }, "gameProp1"]

这样行吗?

您可以使用 Falcor 的 'get' API,它会检索多个值。您可以传递任意数量的所需属性,如下所示

var model=new falcor.Model({
             cache:{       
                     genereList:[
                                    {name:"Recently Watched",
                                     titles:[
                                         {id:123,
                                          name: "Ignatius",
                                         rating: 4}
                                     ]    
                                    },
                                    {name:"New Release",
                                     titles:[
                                         {id:124,
                                          name: "Jessy",
                                         rating: 3}
                                     ]    
                                    }
                                ]
                            }

            });
            Getting single value
            model.getValue('genereList[0].titles[0].name').
            then(function(value){
               console.log(value);
           });

            Getting multiple values
            model.get('genereList[0..1].titles[0].name', 'genereList[0..1].titles[0].rating').
            then(function(json){
                console.log(JSON.stringify(json, null, 4));
            })