[英]Polymer 1.0 boolean property having default value set to true
我有一个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);
})
单元测试失败了。 当我希望它是假的时候, elem.myProperty
实际上设置为true。 为什么是这样?
布尔值属性的行为在Polymer 1.0中已更改 ,现在遵循HTML布尔属性的规范。 如果元素上存在属性(无论属性值如何),则该属性设置为true,如果未指定属性,则不会发生反序列化。 因此,如果最初为true,则无法将布尔属性设置为false。
您只能将属性的默认值设置为false
myProperty: {
type: Boolean,
value: false
}
然后设置属性使myProperty
true。
<my-element my-property></my-element>
在Polymer项目的一些问题中讨论了该主题,例如此处和此处 。
第二个问题还提到了使用Object
类型的属性的解决方法。 因为这些属性是使用JSON.parse
反序列化的,所以可以使用my-property="false"
和my-property="true"
指定一个布尔值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.