Polymer + Firebase (Polymerfire): невозможно прочитать свойство "push" из неопределенного ":" this.$. Query.ref.push(...) "

Я слежу за обучающим видео Polymer + Firebase с использованием Polymer App Tool Kit (инициировано с помощью CLI-полимера).

Когда я пытаюсь отправить данные в коллекцию Firebase, я получаю следующую ошибку:

Cannot read property 'push' of undefined'

Вот мой код (приложение firebase запускается в my-app.html с именем "firebase-app"):

<dom-module id="add-model">
    <!-- Defines the element's style and local DOM -->
    <template>
        <firebase-auth user="{{user}}" app-name="firebase-app"></firebase-auth>
        <firebase-query
                app-name="firebase-app"
                id="query"
                path="/users/[[user.uid]]/models"
                data="{{model}}">
        </firebase-query>
        <paper-input id="modelName" label="Model Name" "></paper-input>
        <paper-button class="create" id="create" on-tap="create" raised>Create</paper-button>
    </template>
    <!-- Creates the element's prototype and registers it -->
    <script>
        Polymer({
            is: 'add-model',
            properties: {
                data: {
                    type: Object
                }
            },
            create: function() {
               this.$.query.ref.push({
                   name: this.$.modelName.value
                });
            }
        });
    </script>
</dom-module>

1 ответ

Решение

Во-первых, я рекомендую сравнить ваш код с исходным кодом Polycast #58 в GitHub, который может более ясно выявить проблему.

this.$.query.ref (<firebase-query>.ref) относится к ref собственностью Polymer.FirebaseDatabaseBehavior, который вычисляется с помощью:

__computeRef: function(db, path) {
  if (db == null ||
      path == null ||
      !this.__pathReady(path) ||
      this.disabled) {
    return null;
  }

  return db.ref(path);
},

Обратите внимание, что db.ref(path) никогда не вернется null, так ref являющийся null должен быть результатом if заявление. Оценка каждого условия может раскрыть проблему:

  • db == null

    • Это свойство вычисляется из app.database() ( никогда не возвращается null) или установлен на null когда app не определено (<firebase-app>). Вы объявили <firebase-app> с надлежащим app-name перед импортом элемента, который использует <firebase-query>?
  • path == null

    • Вы не могли бы установить <firebase-query>.path, Это явно не тот случай.
  • !this.__pathReady(path)

    • Один из компонентов пути может быть пустой строкой или неинициализированным. Для вашего пути (/users/[[user.uid]]/models), возможно, что user еще не определено (пользователь еще не вошел в систему), что приводит к пустой строке в этом компоненте пути (/users//models).
  • this.disabled

    • Вы могли бы установить <firebase-query>.disabled, Это явно не тот случай.
Другие вопросы по тегам