Как искать отдельный элемент в Falcor
У меня проблемы с выяснением того, как структурировать маршруты для извлечения отдельных записей. Например, допустим, у меня есть следующие маршруты:
itemsById[{integers:itemIds}]["id"]["name"]
userItems[{integers:itemIndices}]
Итак userItems
Маршрут ищет соответствующие данные элемента в itemsById
маршрут. Это хорошо для представления списка моего приложения, однако я не уверен, как определить маршрут для представления представления (которое отображает отдельный элемент).
Я полагаю, что если бы я был в представлении списка, я мог бы сохранить индекс элемента, по которому пользователь щелкает, и затем искать этот индекс в itemsById
маршрут, но пользователь может перейти непосредственно к маршруту просмотра представления, что означает, что у меня нет возможности узнать itemsById
индекс.
Я думал, что смогу определить маршрут для возврата отдельного элемента:
userItem[{integers:itemId}]
Этот маршрут принимает itemId
в качестве аргумента затем ищет его в itemsById
но на самом деле это не совсем правильно, так как Фалькор предлагает вам не работать с идентификаторами.
Я, вероятно, что-то упустил. Кто-нибудь знает, какой здесь правильный подход?
1 ответ
Я думаю, что ты рядом. Как я понимаю, это будет ваш индивидуальный маршрут поиска предметов:
itemsById[{keys:itemIds}][{keys:props}]
itemIds
будет передан вашему маршрутизатору в виде массива идентификаторов элементов. Если пользователь просматривает подробный вид из одного элемента, URL-адрес браузера может содержать что-то вроде этого: /items/7bca23
, Так на клиенте вы бы сделали model.get('itemsById.7bca23.name')
например, чтобы захватить название этого элемента.
Между тем, для представления списка у вас будет маршрут, подобный следующему:
itemsByIndex[{integers:indices}]
indices
будет передан на ваш маршрутизатор в виде серии чисел. На клиенте вы бы сделали model.get('itemsByIndex[0..20].name')
, Затем с этого маршрута вы получите массив объектов, подобных этому:
{
path: [ 'itemsByIndex', 0 ],
value: { $type: 'ref', value: [ 'itemsById', '7bca23' ] }
}
Фалькор перепрыгнет на itemsById
маршрут во время того же запроса, чтобы обеспечить остальную часть запрошенного фрагмента графа.