Polymer 1.x + Firebase 2.x: Как отправить или поместить данные в Firebase с помощью Polymerfire?
Используя Polymerfire, я хочу добавить новые узлы в Firebase без перезаписи данных. (Я называю это push
или же put
поведение.)
Другими словами. Я хочу начать с этого:
Состояние Аmy-app
|
- emails
|
+ email1@example,com
+ email2@example,com
И покончим с этим.
Состояние Bmy-app
|
- emails
|
+ email1@example,com
+ email2@example,com
+ email3@example,com
+ email4@example,com
Но когда я начну с состояния A и сделаю это:
<firebase-document
id="doc"
app-name="app"
data="{{data}}">
</firebase-document>
...
this.$.doc.save('/', 'emails');
Я заканчиваю с этим:
Состояние Bmy-app
|
- emails
|
+ email3@example,com
+ email4@example,com
Обратите внимание на начальные данные: email1@example,com
а также email2@example,com
были удалены
Вот документация Polymerfire. Но нигде не упоминается, как достичь этого типа push
или же put
метод для вставки данных в узел.
Как я могу сделать это?
редактировать
this.$.doc('/emails');
вместо
this.$.doc('/', 'emails');
Но это не работает, потому что добавляет случайный автоматический ключ следующим образом:
Состояние Bmy-app
|
- emails
|
- -hvOxpxwjpWHBYGj-Pzqw
|
+ email3@example,com
+ email4@example,com
Обратите внимание на добавленный ключ: -hvOxpxwjpWHBYGj-Pzqw
тем самым разрушает функцию индексации структуры данных.
2 ответа
Здесь я собираюсь предположить, что электронные письма используются в качестве ключей для объектов и не являются массивом (поскольку вы не можете иметь массивы в базе данных реального времени Firebase). Если это так, вы, вероятно, хотите что-то вроде:
<firebase-query
id="emails"
app-name="my-app"
path="/emails"
data="{{emails}}">
</firebase-query>
<script>
// ...
this.$.emails.ref.child('email3@example,com').set({new: 'data'});
// ...
</script>
Если вы не хотите на самом деле запрашивать электронные письма, а просто хотите вставить данные, это также легко сделать с помощью JS SDK:
firebase.database().ref('emails').child('email3@example,com').set({new: 'data'});
Для третьего варианта вы можете использовать <firebase-document>
с пути:
<firebase-document
app-name="my-app"
path="/emails/[[emailKey]]"
data="{{emailData}}">
</firebase-document>
<script>
// ...
this.emailKey = 'email3@example,com';
this.emailData = {new: 'data'};
// ...
</script>
Насколько я знаю, save
Метод делает вещи по-разному двумя способами:
- к
set
новые данные в текущем местоположении. - к
push
новые данные в текущем местоположении.
Чтобы push
новые данные, вы должны представить нет key
в качестве второго аргумента в save
метод:
// This will push new data into the location /emails.
this.$.doc('/emails');
// To set new data (replacing) at location /emails.
this.$.doc('/', 'emails');
Надеюсь, это поможет IIRC. Поправьте меня если я ошибаюсь.