Необходимость явного удаления ".key" перед установкой / обновлением данных в Firebase

Я создал компонент Vue/Vuefire для редактирования существующего виджета и сохранения изменений в Firebase.

Есть некоторые реактивные свойства в виджетах, которые не должны быть сохранены в Firebase, например сообщения об ошибках и показывается ли виджет в настоящее время. Так что я храню все данные Firebase в firebaseData имущество:

Vue.component('widgetForm', {
    template: '#myWidgetFormTemplate',
    props: ['firebaseKey'],
    data: function(){
        return {
            error: '',
            isShown: false,
            firebaseData: {}
        }
    },
    methods: {
        show: function(){
            var form = this;
            form.isShown = true;
            form.$bindAsObject('firebaseData', fb.ref('/widgets').child(form.firebaseKey));
        },
        save: function(){
            var form = this;
            delete form.firebaseData['.key']; // This seems weird
            form.$firebaseRefs.firebaseData.set(form.firebaseData, function(err){
                if(err) form.error = err;
            });
        }
    }
});

Проблема в том, что при сохранении данных я всегда получаю ошибку First argument contains an invalid key (.key), Мое решение состоит в том, чтобы явно удалить .key собственность, как указано выше.

Это похоже на запах кода. Есть ли способ не делать это?

1 ответ

В качестве альтернативы вы можете использовать firebase напрямую вместо vuefire.

methods: {
  show: function() {
    var form = this;
    form.isShown = true;
    fb.ref(`/widgets/${form.firebaseKey}`)
      .on('value')
      .then(snapshot => {
        form.firebaseData = snapshot.val();
      });
  },
  save: function() {
    var form = this;

    fb.ref(`/widgets/${form.firebaseKey}`).set(form.firebaseData, function(err) {
      if (err) form.error = err;
    });
  }
}
Другие вопросы по тегам