2017-06-26 19 views
0

私は<firebase-document>を使用してFirebaseからデータを取得しています。データを{{poster}}にバインドします。次に、そのIDを使用して、そのキーを使用してポスターオブジェクトの詳細を表示します。たとえば、{{poster.name}}にはポスターの名前が表示されます。私は今それを{{poster.name}}スクリプトで使用したいと思います。私がconsole.log(this.poster.name)になると、undefinedというエラーが出ます。バインドされたデータの{{poster}}にアクセスするにはどうすればよいですか?バインドされたPolymerデータにアクセスしてスクリプトで使用するにはどうすればよいですか?

<link rel="import" href="../bower_components/polymer/polymer.html"> 
<link rel="import" href="../bower_components/plastr-poster/plastr-poster.html"> 
<link rel="import" href="../bower_components/polymerfire/firebase-document.html"> 
<link rel="import" href="../bower_components/app-metadata/app-metadata.html"> 
<link rel="import" href="shared-styles.html"> 

<dom-module id="my-details"> 
    <template> 
    <style include="shared-styles"> 
     :host { 
     display: block; 
     } 
    </style> 

    <app-route 
     route="{{route}}" 
     pattern="/:poster_id" 
     data="{{routeData}}" 
     tail="{{subroute}}"> 
    </app-route> 

    <firebase-document 
     id="firebaseDoc" 
     path="/posters/[[routeData.poster_id]]" 
     data="{{poster}}"> 
    </firebase-document> 
    <app-metadata></app-metadata> 

    <div class="poster_board"> 
     <a href="./[[routeData.poster_id]]"> 
     <plastr-poster id="poster" name="[[poster.name]]" location=[[poster.location]] poster="[[poster.poster]]" date="[[poster.date]]"></plastr-poster> 
     </a> 
    </div> 
    </template> 

    <script> 
    Polymer({ 
     is: 'my-details', 
     ready: function() { 
     this.fire('app-metadata', { 
      title: this.poster.name, 
      description: "things to do in your 'hood", 
      keywords: 'events, posters, local, music, dance, art' 
     }); 
     console.log(this.poster.name); 
     }, 
     attached: function() { 
     // this will create the singleton element if it has not been created yet 
     Polymer.AppMetadata.requestAvailability(); 
     }, 
     properties: { 
     prop1: { 
      type: String, 
      value: 'plastr-app', 
     }, 
     } 
    }); 

    </script> 
</dom-module> 

答えて

1

それはあなたのreadyハンドラがthis.poster.nameにアクセスしようとしているが、this.poster<firebase-document>によりまだ取り込まれなかったであろうようになっています

は、ここに私の要素です。 のobserverを次のように使用します。

Polymer({ 
    // ... 

    observers: ['_fireMetadataEvent(poster.name)'], 

    _fireMetadataEvent: function(posterName) { 
    if (posterName) { 
     this.fire('app-metadata', { 
     title: posterName, 
     // ... 
     }); 
    } 
    } 
); 
+0

ありがとうございました!完璧に動作します。どうもありがとうございます! – dnvn

+0

@dnvn問題ありません:) – tony19