我需要在运行时设置聚合物web组件的行为。我试图通过推动新的行为来改变"行为"阵列,但没有奏效。有合适的方法吗?
我正在尝试创建一个底部带有寻呼机的表web组件。它应该是可扩展的,允许从javascript数组、restful服务或自定义源加载数据。因此,我决定为这些源中的每一个创建一个行为,并在源更改时对其进行更改。这是一种正确的设计方式吗?
作为示例,这里是从数组加载数据的行为的源代码。它具有以下功能:
itemsLoad: function(page, itemsPerPage, callback) {...
其从web组件被调用以加载特定页面的数据。我的想法是,基于数据源类型(例如CSV、JSON等)的每种行为都将以不同的方式实现此方法。然后,行为将在运行时注册,因为开发人员在运行时就知道要使用哪个源。
我认为您无法在运行时更改行为,因为它们已混合到元素原型中。
您可以为每个案例(csv、json等)创建一个单独的元素,并根据需要动态创建节点。你可以将该元素放置在你的网格中
<table-component>
<json-data-source></json-data-source>
</table-component>
<table-component>
将寻找实现itemsLoad
的子元素来获取数据。
编辑
要使用子节点,您可以使用Polymer的DOM API。例如,您可以监听添加的子节点,并选择一个实现itemsLoad
方法的子节点。
Polymer({
attached: function() {
Polymer.dom(this).observeNodes(function(info) {
var newNodes = info.addedNodes;
for(var i=0; i<newNodes.length; i++) {
var dataSource = newNodes[i];
if(dataSource.itemsLoad && typeof dataSource.itemsLoad === 'function') {
this.loadItems(dataSource);
break;
}
}
});
}
loadItems: function(dataSource) {
dataSource.itemsLoad().then(...);
}
});
您可以用Polymer.dom(this).children
上的简单迭代来替换Polymer.dom(this).observeNodes
。哪种最适合你。