Polymer 1.0:如何正确绑定(注入/覆盖)dom-module

时间:2015-08-11 14:48:34

标签: polymer polymer-1.0

我有一个Polymer元素,公共API应该允许绑定到用户可以定义的函数,即它应该允许传入函数实现。我尝试了很多方法,但只有1个工作。现在我想知道这是否是正确/正确的方式。

重新说明:将函数绑定为dom-module的公共API的一部分的正确方法是什么?我实现这一目标的唯一方法如下:

    <dom-module id="channel-search">

    <template>
        <remote-dropdown
          id="dropdown"
          label-text="Type channel name" 
          url='{{_findRecordUrl}}' 
          url-transformer='{{urlTransformer}}' 
          result-to-list-transformer='{{resultToListTransformer}}' 
          class="layout horizontal" 
          style='width: 100%'>
        </remote-dropdown>
    </template>

    </dom-module>

    <script>
   (function() {
    Polymer({
      is: 'channel-search',

      properties: {
        _findRecordUrl: {
          type: String,
          value: 'http://127.0.0.1:9292/epics-boot-info.psi.ch/find-channel.aspx'
        }
      },

      /*
        * Here in the attached function, I define the methods which will then be bound to
        * the respective properties of the remote-dropdown element
        */
      attached: function() {

        this.urlTransformer = function(baseUrl, currentInput) {
          return baseUrl + '/' + currentInput;
        };

        this.resultToListTransformer = function(findRecordList) {
          var responseList = findRecordList.map(function(res) {
            return res.Channel;
          });
          return responseList;
        };

      }

    });
  })();
</script>

因此,我需要在attached回调中定义函数,以便将它们正确绑定到remote-dropdown元素的公共API。

我希望它会更清晰/更容易,也许是这样:

<script>
   (function() {
    Polymer({
      is: 'channel-search',

      properties: {
        _findRecordUrl: {
          type: String,
          value: 'http://127.0.0.1:9292/find-channel.aspx'
        }
      },

      urlTransformer: function(baseUrl, currentInput) {
          return baseUrl + '/' + currentInput;
      };

      resultToListTransformer: function(findRecordList) {
          var responseList = findRecordList.map(function(res) {
            return res.Channel;
          });
          return responseList;
      };

    });
  })();
</script>

即。只需将函数实现定义为元素定义的一部分,然后将它们绑定到嵌入的remote-dropdown元素。然而,这似乎从来没有像我想象的那样(也没有变化) - 当然也是因为我对Polymer / Javascript内部的了解有限。

我的问题是:使用attached回调的解决方案是否正确实现我想做的事情?如果没有,那么实现这个的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用computed propertiescomputed bindings执行此操作。你的第一个答案看起来像后者的变种。