聚合物:在运行时记录行为



我需要在运行时设置聚合物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。哪种最适合你。

最新更新