2015-07-02 26 views
5

Tôi có một Polymer yếu tố 1.0 tùy chỉnh mà có một tài sản của kiểu boolean với giá trị mặc định thiết lập là true:Polymer 1.0 sở hữu boolean có giá trị mặc định thiết lập là true

myProperty: { 
     type: Boolean, 
     value: true 
    } 

Trong đơn vị thử nghiệm của tôi tôi nhanh chóng tùy chỉnh này phần tử có thuộc tính của tôi được đặt thành 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); 
}) 

Kiểm tra đơn vị không thành công. elem.myProperty thực sự được đặt thành true khi tôi mong đợi nó sai. Tại sao điều này?

Trả lời

12

Hành vi của thuộc tính boolean has changed in Polymer 1.0 và hiện theo đặc điểm của thuộc tính boolean HTML. Thuộc tính được đặt thành true nếu thuộc tính tồn tại trên phần tử (bất kể giá trị thuộc tính) và không có quá trình deserialization xảy ra nếu thuộc tính không được chỉ định. Vì vậy, bạn không thể đặt thuộc tính boolean thành false nếu ban đầu nó là true.

Bạn chỉ có thể thiết lập giá trị mặc định của bất động sản là false

myProperty: { 
    type: Boolean, 
    value: false 
} 

và sau đó thiết lập các thuộc tính để làm myProperty đúng.

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

Chủ đề này đã được thảo luận trong một số vấn đề của dự án Polymer, ví dụ herehere.

Vấn đề thứ hai cũng đề cập đến giải pháp thay thế bằng cách sử dụng thuộc tính loại Object. Vì các thuộc tính này được deserialized với JSON.parse, bạn có thể chỉ định giá trị boolean với my-property="false"my-property="true".

+0

Thú vị! Cảm ơn phản hồi chi tiết của bạn. –

Các vấn đề liên quan