【问题标题】:Polymer + Firebase (Polymerfire): Cannot read property 'push' of undefined': 'this.$.query.ref.push(...)'Polymer + Firebase (Polymerfire):无法读取未定义的属性“push”:“this.$.query.ref.push(...)”
【发布时间】:2017-01-03 13:09:10
【问题描述】:

我正在使用 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>

【问题讨论】:

    标签: javascript firebase firebase-realtime-database polymer


    【解决方案1】:

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

    this.$.query.ref (&lt;firebase-query&gt;.ref) 指的是Polymer.FirebaseDatabaseBehaviorref 属性,即computed 与:

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

    注意db.ref(path) never returns null,所以refnull 必须是if 语句的结果。评估每个条件可能会发现问题:

    • db == null

      • 此属性是来自app.database() (never returns null) 的computed,或者在未定义app 时设置为null(由&lt;firebase-app&gt; 定义)。在导入使用&lt;firebase-query&gt; 的元素之前,您是否使用正确的app-name 声明了&lt;firebase-app&gt;
    • path == null

    • !this.__pathReady(path)

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

    【讨论】:

    • 惊人、合乎逻辑且解释清楚的答案!原来问题在于第一点:firebase-app 没有正确导入:我在另一个模块&lt;firebase-config&gt; 中有我的 firebase-app 配置,因此我可以轻松地在我的应用程序中重用 firebase 数据。 &lt;firebase-config&gt; 在我的主应用程序容器视图中 (my-app.html)。如果我将&lt;firebase-config&gt;my-app.html 移动到add-model.html 它可以工作,但我在my-app.html 中有功能,这也需要&lt;firebase-config&gt;。加载模块两次返回Uncaught Error: Firebase App named 'firebase-app' already exists.
    • 就我之前的评论发布了一个新问题:stackoverflow.com/questions/41443228/… 再次感谢您的深入解释。
    • @Dean 没问题 :)
    • 你能看看我的另一个问题(第二条评论中的链接)吗?这就是我在我的应用程序中声明&lt;firebass-app&gt; 时遇到的问题。我整个上午都在做,但一直没能解决。
    • 好的,如果没有人回答,我会在今天晚些时候尝试回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 2023-04-09
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    相关资源
    最近更新 更多