javascript - 如何访问绑定(bind)的 polymer 数据并在脚本中使用它?

标签 javascript data-binding polymer polymer-1.0

我正在使用<firebase-document>从 Firebase 获取数据。我将数据绑定(bind)到 {{poster}} 。然后,我使用该 ID 通过其键来显示海报对象的详细信息。例如,{{poster.name}}显示海报的名称。我现在想使用 {{poster.name}}在脚本中。当我 console.log(this.poster.name) ,我得到一个undefined错误。如何访问{{poster}}绑定(bind)数据?

这是我的元素:

<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>

最佳答案

看起来像你的ready处理程序正在尝试访问 this.poster.name ,但是this.poster <firebase-document> 尚未填充。我会使用observerposter.name像这样:

Polymer({
  // ...

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

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

关于javascript - 如何访问绑定(bind)的 polymer 数据并在脚本中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44767187/

相关文章:

javascript - 映射数组时复合值?

javascript - DOM 属性和 React

javascript - 从父级清除输入的 VUE 组件数据

javascript - Polymer - 使用计算绑定(bind)的多个 Accordion

javascript - 在谷歌表格中使用超链接时进行记录

silverlight - 简单的 silverlight 数据绑定(bind)列表框到 List<>

c# - DataGridView selectionChanged 事件多次触发

polymer - 按需加载 polymer 元素

javascript - polymer - 该对象在功能中不可用

javascript - ng-click 从内部数组中删除项目