寻找有关Polymer的一些建议以及如何正确地在元素之间共享。
我的目标是一次加载和处理一组数据,并在聚合物组件之间共享该数据。我尝试过创建聚合物元素' load-data'获取数据,格式化数据,然后将结果存储为iron-meta标记。
<dom-module id="load-data">
<template>
...
<div id="metatags"></div>
<iron-ajax ....on-response="handleResponse"></iron-ajax>
</template>
</dom-module>
<script>
Polymer({
is: 'load-data',
...
handleResponse: function (data) {
// do stuff
var processed_data = document.createElement('iron-meta');
processed_data .setAttribute('key','processed-data');
processed_data .setAttribute('value',JSON.stringify(processed_data));
this.$.metatags.appendChild(processed_data); // metatags refers to a div in local dom
...
}
}
</script>
然后,我将加载数据&#39;在其他自定义元素中假设我现在可以访问我需要的数据(通过iron-meta-query)。
<dom-module id="a-visualization">
<template>
...
<load-data></load-data>
...
</template>
</dom-module>
<script>
Polymer({
is: 'a-visualization',
...
</script>
最后,我在我的网页上多次使用我的元素......以及我发现问题的地方。
...
<a-visualization id="first"></a-visualization>
<a-visualization id="second"></a-visualization>
...
因此,当加载第一个a-visualization元素时,会创建load-data并进行异步调用以获取数据。浏览器继续执行并加载第二个a-visualization元素。在这一点上,理想情况下我希望第二个元素等到第一个元素加载数据......当前正在进行的操作。
我可以在第一次遇到load-data时设置一个标志,并在第二次调用load-data时检查该标志,但是我仍然不知道何时继续处理第二个元素。从标志我可以看出加载过程已经开始...但除非我轮询/睡眠/民意调查感觉是一个糟糕的方法,第二个元素不知道何时再次开始处理。我想我真的需要让第一个load-data实例执行一个回调来通知第二个元素已完成,但我不知道该怎么做。
而且,我并不确定我的一般方法是否合适。我绝不是聚合物或网络专家。试着玩得开心! : - )
您如何推荐我在Polymer中处理它?</ p>