我有一个聚合物元素,需要从Web服务加载一些数据。
<gallery-pol loader=""></gallery-pol>
@CustomTag('gallery-pol')
class PolymerGallery extends PolymerElement {
@published GalleryDataLoader loader;
...
}
我不想在我的聚合物元素中实现数据加载,因为它不应该被修复到特定的Web服务。
将实现实际数据加载的对象传递给聚合物元素的最佳方法是什么?
我应该只在主程序中选择我的元素并将加载器分配给元素吗? 或者是否有一些扼杀方式直接将其作为属性传递?
谢谢你, lolsharp
答案 0 :(得分:2)
我会考虑将加载器建模为自定义元素。从那里你可以选择如何沟通。
一个是让画廊在小时候找到装载者:
<z-gallery>
<z-gallery-loader></z-gallery-loader>
</z-gallery>
元素也可以通过查询/ ids或绑定找到对方:
<z-gallery-view>
<z-gallery-loader id="loader"></z-gallery-loader>
<z-gallery loader="{{ $['loader'] }}"></z-gallery>
</z-gallery-view>
$[]
Polymer元素上下文中的 <z-gallery-view>
按id查找内容。您还可以绑定到id字符串并自己执行查询:
<z-gallery-view>
<z-gallery-loader id="loader"></z-gallery-loader>
<z-gallery loader="loader"></z-gallery>
</z-gallery-view>
另一种方法是通过事件进行沟通:
<z-gallery-loader on-load-gallery="{{ loadGallery }}">
<z-gallery></z-gallery>
</z-gallery-loader>
<z-gallery>
可以触发加载图库&#39; (或者可能是一些更多的用户操作中心事件)自定义事件来请求加载数据,并且由于它被包括作为事件的目标,加载器可以做它并将数据推回去到画廊。
如果您不想要那里的包含关系,您可以通过在驱动程序上触发事件的不同父元素来重定向事件:
<z-gallery-view on-load-gallery="{{ loadGallery }}">
<z-gallery-loader></z-gallery-loader>
<z-gallery></z-gallery>
</z-gallery-view>
在这种情况下,loadGallery委托给loader子。