2015-07-02 13 views
5

mam polimeru 1,0 niestandardowy element, który ma właściwość typu boolean z domyślną wartością ustawioną na true:Polymer 1,0 właściwość logiczna posiadające wartość domyślna wartość true

myProperty: { 
     type: Boolean, 
     value: true 
    } 

W mojej jednostce testu I instancję ten zwyczaj element z moją własnością ustawiono na wartość 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); 
}) 

Test jednostkowy zawodzi. elem.myProperty jest rzeczywiście ustawiony na true, kiedy oczekiwałbym, że jest fałszywy. Dlaczego to?

Odpowiedz

12

Zachowanie właściwości boolowskich has changed in Polymer 1.0, a teraz następuje po specyfikacji atrybutów boolean HTML. Właściwość ma wartość true, jeśli atrybut istnieje na elemencie (niezależnie od wartości atrybutu) i nie ma miejsca przekształcenie w postaci szeregowej, jeśli atrybut nie jest określony. Więc nie można ustawić właściwości boolean na wartość false, jeśli była początkowo prawdziwa.

Można tylko ustawić domyślną wartość nieruchomości do fałszywego

myProperty: { 
    type: Boolean, 
    value: false 
} 

a następnie ustawić atrybut aby myProperty prawda.

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

Ten temat został omówiony w niektórych kwestiach projektu polimeru, na przykład here i here.

Drugi numer wspomina również o obejściu, używając właściwości typu Object. Ponieważ te właściwości są deserialized z JSON.parse możesz określić wartość logiczną z my-property="false" i my-property="true".

+0

Interesujące! Dziękuję za szczegółową odpowiedź. –