编程语言
首页 > 编程语言> > javascript-复选框的选中属性绑定-聚合物

javascript-复选框的选中属性绑定-聚合物

作者:互联网

我试图将Polymer属性绑定到CheckBox的checked属性.但是,该属性的观察者永远不会被解雇,此外,标签也永远不会显示任何文本.

但是,每次单击CheckBox时,我都可以执行一个功能.

这是我的代码:

<link rel="import" href="../../components/polymer/polymer.html">

<dom-module id="check-box-example">
  <template>
    <div>
      <label>
        <template if="{{checked}}">Uncheck</template>
        <template if="{{!checked}}">Check</template>
      </label><br>
      <input type="checkbox" checked="{{checked}}" on-click="_checkBoxClicked">Check Box
    </div>
  </template>
  <script>
    Polymer({
      is: 'check-box-example',
      properties:{
        checked: {
          type: Boolean,
          observer: '_checkedChanged'
        }
      },
      _checkBoxClicked: function() {
        console.log("The Check Box was clicked.");
      },
      _checkedChanged: function(newValue, oldValue) {
        console.log("New Checkbox value: " + newValue);
      },
    });
  </script>
</dom-module>

我究竟做错了什么?提前致谢.

解决方法:

一些问题:

>您的模板缺少is =“ dom = if”,因此它实际上在您的代码中不执行任何操作.
>即使应用了dom-if,if属性也会设置为选中状态,没有初始值.仅当bound属性具有一个未定义的值,并且由于从不设置checked时,才对绑定进行评估,因此您的模板不会标记任何内容(即,您不会看到“ Check”或“ Uncheck”).

properties: {
  checked: {
    type: Boolean,
    value: false  // initial value required for binding
  }
}

>您的模板文本向后看. if =“ {{{checked}}”的文本内容为“ Uncheck”,而if =“ {{!checked}}”“为” Check“.也许这些是用户说明,而不是复选框状态.
>本地输入不会为其checked属性发出更改事件,因此绑定不会更新您的checked属性.取而代之的是,您可以更新您的点击处理程序,以显式设置您的选中属性以匹配输入的选中值.

_checkBoxClicked: function(e) { this.checked = this.$.input.checked; }

>您的标签与输入没有关联,因此单击它不会更改复选框的状态.您可以使用以下标签来解决此问题:

<label for="foo">...</label>
<input id="foo">

或通过使输入成为标签的子代:

<label>
  <input>
</label>

codepen

标签:polymer,html,javascript,checkbox
来源: https://codeday.me/bug/20191026/1938811.html