Polymer 聚合:在运行时注册行为

Polymer 聚合:在运行时注册行为,polymer,polymer-1.0,Polymer,Polymer 1.0,我需要在运行时设置聚合web组件的行为。我试图通过推动新的行为来改变“行为”数组,但没有成功。有合适的方法吗 我正在尝试创建一个底部带有寻呼机的表格web组件。它应该是可扩展的,允许从javascript数组、restful服务或自定义源加载数据。因此,我决定为这些源中的每一个创建一个行为,并在源更改时更改它。这是一种正确的设计方法吗 这里是从数组加载数据的行为示例。它具有以下功能: itemsLoad: function(page, itemsPerPage, callback) {...

我需要在运行时设置聚合web组件的行为。我试图通过推动新的行为来改变“行为”数组,但没有成功。有合适的方法吗

我正在尝试创建一个底部带有寻呼机的表格web组件。它应该是可扩展的,允许从javascript数组、restful服务或自定义源加载数据。因此,我决定为这些源中的每一个创建一个行为,并在源更改时更改它。这是一种正确的设计方法吗

这里是从数组加载数据的行为示例。它具有以下功能:

itemsLoad: function(page, itemsPerPage, callback) {...

从web组件调用以加载特定页面的数据。我的想法是,基于数据源类型(例如CSV、JSON等)的每个行为都将以不同的方式实现此方法。然后,行为将在运行时注册,因为在运行时开发人员知道要使用的源代码。

我认为您无法在运行时更改行为,因为它们混合到元素原型中

您可以为每个案例(csv、json等)创建一个单独的元素,并根据需要动态创建节点。您可以将该元素放置在网格中

<table-component>
   <json-data-source></json-data-source>
</table-component>

您可以简单地替换为对Polymer.dom(this.children)进行迭代。无论哪个最适合您。

谢谢您的回复。如何查找子元素并确定它是否实现itemsLoad?对于Polymer,它基本上类似于普通的DOM操作。以及检查元素是否实现了一个函数?检查它是否存在。请参阅更新的答案
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(...);
  }
});