我有一个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,我希望它是假的。这是为什么?
答案 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项目的一些问题中讨论了此主题,例如here和here。
第二个问题还提到了使用Object
类型的属性的解决方法。由于使用JSON.parse
对这些属性进行反序列化,因此您可以使用my-property="false"
和my-property="true"
指定布尔值。