Polymer 1.0布尔属性,默认值设置为true

时间:2015-07-02 09:14:58

标签: javascript polymer polymer-1.0

我有一个Polymer 1.0自定义元素,它具有boolean类型的属性,默认值设置为true:

    myProperty: {
        type: Boolean,
        value: true
    }

在我的单元测试中,我将my-property设置为false来实例化这个自定义元素:

<my-custom-element id="myElem" my-property="false"></my-custom-element>

 var elem = document.getElementById('myElem');

 test('it_should_set_myProperty_to_false', function () {
     assert.equal(elem.myProperty, false);
 })

单元测试失败。 {I}实际上设置为true,我希望它是假的。这是为什么?

1 个答案:

答案 0 :(得分:13)

布尔属性has changed in Polymer 1.0的行为现在遵循HTML布尔属性的规范。如果元素上存在属性(无论属性值如何),则该属性设置为true,如果未指定属性,则不会发生反序列化。因此,如果最初为真,则无法将布尔属性设置为false。

您只能将属性的默认值设置为false

myProperty: {
   type: Boolean,
   value: false
}

然后将属性设置为使myProperty为真。

<my-element my-property></my-element>

在Polymer项目的一些问题中讨论了此主题,例如herehere

第二个问题还提到了使用Object类型的属性的解决方法。由于使用JSON.parse对这些属性进行反序列化,因此您可以使用my-property="false"my-property="true"指定布尔值。