Polymer + Firebase(Polymerfire):无法读取undefined':'的属性'push'。$。query.ref.push(...)'

时间:2017-01-03 02:42:37

标签: javascript firebase firebase-realtime-database polymer

我正在使用Polymer App Tool Kit(使用聚合物CLI启动)跟踪Polymer + Firebase tutorial video

当我尝试将数据推送到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 个答案:

答案 0 :(得分:2)

首先,我建议您将代码与Polycast #58 source in GitHub进行比较,这可能会更清楚地向您揭示问题。

this.$.query.ref<firebase-query>.ref)引用Polymer.FirebaseDatabaseBehavior的{​​{3}}属性,ref为:

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

  return db.ref(path);
},

请注意db.ref(path) computed,因此ref null必须是if声明的结果。评估每个条件可能会发现问题:

  • db == null

    • 此属性来自app.database() never returns nullcomputed,或never returns null未定义时null <firebase-app> )。在导入使用<firebase-app>的元素之前,您是否使用正确的app-name声明了<firebase-query>
  • path == null

    • 您可能没有设置app。事实显然并非如此。
  • <firebase-query>.path

    • 其中一个路径组件可能是空字符串或未初始化。对于您的路径(/users/[[user.uid]]/models),可能尚未定义user(用户尚未登录),这导致该路径组件中的空字符串({{1 }})。
  • /users//models