2013-07-19 2 views
0

Я до сих пор не видел никаких обсуждений или осведомленности о том, что Firebase действительно предоставляет уникальный идентификатор - фактически полный URL-адрес для каждой конкретной записи данных через их «моментальный снимок», который они возвращают, то есть обертка вокруг запись данных (доступ через snapshot.val()). Проведя базовое исследование свойств моментального снимка, я обнаружил, что доступен уникальный URL (см. Примеры ниже). Однако кажется, что по какой-то причине Firebase постоянно меняет имя ключа каждые несколько дней, в результате чего мое приложение прерывается. Я должен зайти и снова открыть новый ключ свойства URL и изменить его, чтобы он снова работал.Почему ключ свойства url в снимке Firebase продолжает меняться?

Вот три примера того, как я видел изменение ключа до сих пор. Каждое значение то же самое, но ключ постоянно меняется с течением времени (то есть: «Wb», «ХВ», «BC») .:

getMemberBySnapshot - snapshot has prop Wb with value https://prototype1.firebaseio.com/users/-IwohKfw1l5F3gFqyJJ5 

getMemberBySnapshot - snapshot has prop Xb with value https://prototype1.firebaseio.com/users/-IwohKfw1l5F3gFqyJJ5 

getMemberBySnapshot - snapshot has prop bc with value https://prototype1.firebaseio.com/users/-IwohKfw1l5F3gFqyJJ5 

Я прочитал предложения Firebase о том, что разработчики должны использовать адрес электронной почты, если они хотят уникальный ключ (что, если моя модель не использует поле электронной почты? Что делать, если пользователь хочет изменить свою электронную почту?), или Firebase предлагает altenatively получить все существующие записи, а затем выполнить поиск через них на клиенте. Ни одно из этих решений не удовлетворяет. Но я вижу, что они предоставляют уникальный URL для каждой записи данных в «снимке». Почему они не обеспечивают стабилизированный ключ, так что разработчик может называть его последовательно?

ответ

2

Firebase.js - это скомпилированный скрипт. Имена внутренних переменных будут меняться каждый раз, когда мы ее скомпилируем и выпустим новую версию, поэтому вам определенно не следует полагаться на какие-либо свойства, которые не задокументированы на нашем сайте.

Для вашего конкретного случая, вы должны использовать:

snapshot.ref().toString() 

для того, чтобы получить URL.

+0

Благодарим вас за быстрый ответ! Подобно предложению, я бы сказал, что документация может быть более четкой. То, что вы мне предоставили, ясно: для получения URL-адреса для записи данных из «моментального снимка» я просто код snapshot.ref(). ToString(). Но в документации Firebase кажется, что ref() - это то, что пользователь Firebase создает: >>> Использование var ref = new Firebase ('https://SampleChat.firebaseIO-demo.com/users'); var query = ref.limit (5); var refToSameLocation = query.ref(); <<< – Aqume

+0

Дальнейшие пояснения: Я создаю свои записи с помощью push() или set(), а не путем установки URL-адреса, но пример документации привязан к пользователю, задав URL-адрес , – Aqume

+0

Спасибо. Я посмотрю, что мы можем сделать. :-) –

Смежные вопросы