自定义聚合物组件之间无通信

时间:2015-10-07 20:09:21

标签: javascript html html5 polymer polymer-1.0

我编写了一个自定义聚合物组件,该组件具有多个较小的自定义组件,专为整个过程的一个特定步骤而设计。 这些元素应该请求特定的输入参数,每个步骤都建立在前面的步骤之上。最终组件包含从API中检索的结果,该API接受从第一步收集的输入。

我的问题是我无法从一个组件获取信息到下一个组件。我几乎在每个使用的组件中都有这个问题,所以我怀疑我想要的方式是问题。

第一个问题是我需要从API中检索可能性列表,并在多个子组件的下拉列表中显示此列表。 我将此列表放在 Polymer 属性中,但自动绑定不会触发,并且数据更改未正确传播到子组件(如果有的话)。我定义了几个获取数据的iron-ajax元素,并且有一个带有子组件的模板,需要输出这些iron-ajax元素。

<template>
    <iron-ajax auto url="{{typesURL}}" handle-as="json"
      on-response="handleTypesResponse"></iron-ajax>
    <!-- more iron-ajax elements -->

    <section id="activities">
      <template is="dom-repeat" items="{{activities}}" as="activity">
        <my-activity activity="{{activity}}"
                      types="{{types}}" />
      </template>
    </section>
    <!-- more classic html elements -->
</template>

我的网址很简单,它可以很好地投射到数组中,但如果我将一个项目添加到活动数组中,则不会重新加载和编辑活动中的模板。我怎么能做到这一点?

我面临的第二个问题是获得&#39;结果&#39;一个组件。 我有一个表单,我希望用户指定时间。为此,我使用paper-time-picker。但是,在选择时间并返回到基础Web组件时,时间不会更改。 这是定义对话框的代码:

<paper-dialog id="timeDialog" modal class="paper-time-picker-dialog" entry-animation="scale-up-animation" exit-animation="fade-out-animation">
  <h2>Start time <span>{{activity.name}}</span></h2>
  <paper-time-picker id="startTimePicker"></paper-time-picker>
  <div class="buttons">
    <paper-button dialog-dismiss>Cancel</paper-button>
    <paper-button dialog-confirm autofocus on-tap="confirmTime">OK</paper-button>
  </div>
</paper-dialog>

在Polymer属性下面定义的这些函数都显示和检索对话框和结果:

  showAttachedDialog: function (id) {
    var button = this.$$(id);
    if (!button.hasAttribute('data-dialog')) {
      return;
    }

    var dialogId = '#' + button.getAttribute('data-dialog');
    var dialog = this.$$(dialogId);
    if (dialog) {
      dialog.open();
    }
  },
  confirmTime: function () {
    this.activity['time'] = this.$$('#timePicker').time;
    this.notifyPath('activity.time', this.activity.time);

    console.log(this.activity);
    console.log("time activity: " + this.activity.time);
  },

控制台输出显示为空(如&time活动:&#39;)。有谁看到我做错了什么?如果您需要更多信息,请在此处查看我可能缺少的信息。 谢谢。

1 个答案:

答案 0 :(得分:0)

关于活动 - 你应该使用Polymer的push,pop等,请参阅https://www.polymer-project.org/1.0/docs/devguide/templates.html#dom-repeat。或者manualy调用notifyPath。这有效:

image = new Image();
image.src = "https://upload.wikimedia.org/wikipedia/commons/1/1e/Large_Siamese_cat_tosses_a_mouse.jpg";

image.onload = function () {
    for (i = 1; i < 4; i++) {
        var ctx = document.getElementById('myCanvas-' + i).getContext('2d');

        var candidatePerformance = $('#performance' + i).val();
        var skillSet = $('#skillSet' + i).val();
        var verificationId = $('#verificationId' + i).val();

            ctx.drawImage(image, 0, 0);
            ctx.font = '15pt Arial ';
            ctx.fillStyle = "#000";
            ctx.textAlign = 'left';
            ctx.fillText(skillSet, 10, 125);
            ctx.font = '15pt Arial';
            ctx.fillStyle = "#000";
            ctx.textAlign = 'left';
            ctx.fillText(performance, 160, 155);
            ctx.font = '15pt Arial';
            ctx.fillStyle = "#000";
            ctx.textAlign = 'left';
            ctx.fillText(verificationId, 49, 185);

    }
}