【发布时间】:2015-10-07 20:09:20
【问题描述】:
我编写了一个自定义 Polymer 组件,其中包含多个较小的自定义组件,这些组件针对整个流程的一个特定步骤而设计。 这些元素应该请求特定的输入参数,并且每个步骤都建立在前面的步骤之上。最后一个组件包含从 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>
我的 url 很简单,它可以很好地转换为数组,但是如果我向活动数组中添加项目,活动中的 模板 不会重新加载和编辑。我怎么能做到这一点?
我面临的第二个问题是获取组件的“结果”。 我有一个表单,我希望用户指定时间。为此,我使用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);
},
控制台输出变为空(如“时间活动:”)。有谁看到我做错了什么?如果您需要了解我在这里可能遗漏的内容,请务必询问更多信息。 谢谢。
【问题讨论】:
标签: javascript html polymer polymer-1.0