【问题标题】:Retrieve data from Firebase to Polymer element从 Firebase 检索数据到 Polymer 元素
【发布时间】:2016-07-14 07:46:43
【问题描述】:

我无法将数据从 firebase 获取到聚合物元素。

这是我的代码:

 <dom-module id="bb-account-settings">

  <template>

    <style is="custom-style" include="shared-styles"></style>

                <div class="settings-dialog">
                    <div class="frame">
                        <div class="horizontal layout">
                            <div>
                                <div class="user-image"></div>
                            </div>
                            <div class="horizontal layout">
                                <paper-input label="First Name" value="{{fNameSet}}"></paper-input>
                                &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
                                <paper-input label="Last Name" value="{{lNameSet}}"></paper-input>
                            </div>
                            <paper-input label="Email" value="{{emailSet}}"></paper-input>
                        </div>
                        <paper-input label="Phone number" value="{{phoneSet}}" allowed-pattern="[0-9]"></paper-input>
                    </div>
                </div>

  </template>
  <script>

    Polymer({

      is: 'bb-account-settings',

            properties: {
                fNameSet: {
                    type: String,
                    value: function() {
                        var userId = firebase.auth().currentUser.uid;
                        firebase.database().ref('/user/' + userId + '/UserInfo').once('value').then(function(snapshot) {
                            console.log(snapshot.val().fName)
                            return (snapshot.val().fName);
                        });
                    }
                },
                lNameSet: {
                    type: String,
                    value: 'test last name'
                    }
                }
            }

    });

  </script>

lNameSEst 是“测试姓氏”,显然它放在输入字段中。你很希望 fNameSet 能做同样的事情,但不是。当我打印它(console.log)时,它说“测试名字”,但它没有显示在它的输入文件中!

我很困惑。

【问题讨论】:

  • 就我对 js 的理解而言,你不能从回调函数中返回一些东西。
  • @a1626 this 网站表明我的做法是正确的。
  • @ZviKarp 对聚合物一无所知,但我认为您可以开始研究this post
  • 你应该看看this

标签: javascript firebase polymer firebase-realtime-database polymer-1.0


【解决方案1】:

正如其中一位评论者所注意到的,在回调中返回一个值是问题所在。传递给 firebase 的“once”函数的函数在不同的范围内被异步调用,因此基本上它失去了与您声明它的位置的关系,并且您返回的值不会到达您期望的位置。

获得您想要的东西的一种有点蛮力的方法是执行以下操作:

ready: function() {
    var userId = firebase.auth().currentUser.uid;
    firebase.database().ref('/user/' + userId + '/UserInfo').once('value').then(function(snapshot) {
          console.log(snapshot.val().fName)
          this.fNameSet = snapshot.val().fName;
        }.bind(this));
}

还有更优雅的方法,但它有点超出了这个问题的范围,需要对应用程序的结构进行一些重组和更深入的了解。

【讨论】:

  • 哇!那完成了工作!我希望它没有那么紧凑。谢谢。
  • 很好,是的,有更清洁的方法,但需要更多的阐述。 polymerfire 元素,尤其是 firebase-document 元素,可能会为您提供另一种方法的灵感。这个演示展示了它的实际效果 - github.com/firebase/polymerfire/blob/master/demo/note-app.html 还介意将此标记为您问题的答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多