2016-07-14 23 views
0

我無法從firebase向聚合物元素獲取數據。從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)它說'測試名字',但它不顯示在它的輸入字段!

我很困惑。

+0

就我對js的理解而言,你不能從回調函數中返回某些東西。 – a1626

+0

@ a1626 [this](https://www.polymer-project.org/1.0/docs/devguide/properties#configure-values)網站顯示我正在以正確的方式進行操作。 –

+0

@ZviKarp對聚合物沒有任何知識,但我認爲你可以開始研究[這篇文章](https://divshot.com/blog/web-components/building-a-qa-system-with-polymer-和-firebase /) – adolfosrs

回答

2

正如其中一位評論者注意到的,在回調中返回值是問題所在。傳遞給firebase的「一次」函數的函數在異地調用&,所以基本上它失去了它與聲明的關係。&您返回的值不會出現在您期望的位置。

一個有點暴力的方式來獲得你想要的是做一些類似如下:

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)); 
} 

有更優雅的方式,但它是有點超出了這個問題&的範圍需要一些重構建&深入洞察您的應用程序的結構。

+0

哇!那樣做了!我希望它沒有那麼緊湊。謝謝。 –

+0

好&是啊有更清潔的方式,但它需要更詳細說明。聚合火力元素,特別是火力基地文檔元素,可能會爲您提供另一種方法的啓示。這個演示顯示它在行動 - https://github.com/firebase/polymerfire/blob/master/demo/note-app.html還要記住標記爲您的問題的答案? – sfeast