Vuefire Firebase 更新问题

Vuefire Firebase update issues

我在从 VueFire 更新 Firebase 时遇到了一些问题。我正在尝试使用以下方法,但如果我将任何字段留空(这应该在设置中经常发生),它就会对我大喊大叫。知道如果 .update 有一个空白字段为什么会生气吗?

Error: Uncaught Error: Firebase.update failed: First argument contains undefined in property 'businesses.somebusiness.video'

updatePost(post) {
        postsRef.child(post['.key']).update({
          name: post.name,
          video: post.video,
          story: post.story,
          cover: post.cover,
          card: post.card
        })
      },

有一次我把上面的重写成这样:

updatePost: function (post) {
        const businesschildKey = post['.key'];
        delete post['.key'];
        /* Set the updated post value */
        this.$firebaseRefs.posts.child(businesschildKey).set(post)
      },

效果惊人,但删除键似乎会导致 Vue 中出现奇怪的排序问题。如果我能找到一种方法不让它在留空时出错,我宁愿坚持使用 top 方法。

根据

When you pass an object to Firebase, the values of the properties can be a value or null (in which case the property will be removed). They can not be undefined, which is what you're passing in according to the error.

您的错误消息表明 post.video 的值为 undefined。您可以使用逻辑或来提供后备值,如下所示:

  video: post.video || null,

这意味着只要 post.video 有一个 false-y 值,表达式的计算结果将是 null。不过,这可能会捕获空字符串或数字 0。更准确地说,你应该使用

  video: typeof post.video === 'undefined' ? null : post.video,

如果您需要对许多值进行此检查,您可以为其编写一个函数:

function nullIfUndefined(value) {
  return typeof value === 'undefined' ? null : value;
}

那么你的表情就是

  video: nullIfUndefined(post.video),