Polymer - 创建通用属性定义

时间:2016-12-17 12:22:57

标签: polymer polymer-1.0

有没有办法在其类型未知时定义属性?

properties: {
  value: {
   type: Generic
  }
}

最好的方法是什么?

我的问题来自于拥有可能是StringNumber的值。我知道我可以parseInt(),但我需要检测是否有必要。此外,当一个属性是一个字符串时,该字符串可以是value = '5',这有条件地应用parseInt()乏味。

1 个答案:

答案 0 :(得分:1)

您需要定义Object类型的属性。

properties: {
  value: Object
}

考虑到属性的可能值,解析是不可避免的,但可以很简单。例如,您可以使用带有String#replace的正则表达式从输入中删除所有非数字字符,并将结果转换为Number

Number(value.replace(/[^\d]+/g, ''))



HTMLImports.whenReady(() => {
  Polymer({
    is: 'x-foo',
    properties: {
      value: Object,
      numberValue: {
        computed: '_computeValue(value)'
      }
    },
    _computeValue: function(value) {
      // If the value is a string, remove all non-numeric
      // characters and convert the result to a number.
      return typeof value === 'string'
        ? Number(value.replace(/[^\d]+/g, ''))
        : value;
    }
  });
});

<head>
  <base href="https://polygit.org/polymer+1.7.1/components/">
  <script src="webcomponentsjs/webcomponents-lite.min.js"></script>
  <link rel="import" href="polymer/polymer.html">
</head>
<body>
  <x-foo value="100"></x-foo>
  <x-foo value="value = '5'"></x-foo>
  <x-foo value="foo 2 bar 4 baz 6 qux"></x-foo>
  
  <dom-module id="x-foo">
    <template>
      <div>[[value]] ==> [[numberValue]]</div>
    </template>
  </dom-module>
</body>
&#13;
&#13;
&#13;

regex101 explanation模式:

enter image description here