2015-07-02 12 views
5

Ich habe ein Polymer 1.0 benutzerdefiniertes Element, das eine Eigenschaft vom Typ boolean mit Standardwert auf true gesetzt hat:Polymer 1.0 boolean Eigenschaft Standardwert auf true gesetzt

myProperty: { 
     type: Boolean, 
     value: true 
    } 

In meinem Unit-Test ich diesen Brauch instanziiert element mit my-property auf false gesetzt:

<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); 
}) 

Der Komponententest schlägt fehl. elem.myProperty ist tatsächlich auf wahr gesetzt, wenn ich erwarten würde, dass es falsch ist. Warum ist das?

Antwort

12

Das Verhalten der booleschen Eigenschaften has changed in Polymer 1.0 und folgt nun der Spezifikation der booleschen HTML-Attribute. Die Eigenschaft wird auf "true" gesetzt, wenn das Attribut für das Element vorhanden ist (unabhängig vom Attributwert). Wenn das Attribut nicht angegeben wird, findet keine Deserialisierung statt. Daher können Sie eine boolesche Eigenschaft nicht auf false setzen, wenn sie ursprünglich wahr war.

können Sie legen nur den Standardwert der Eigenschaft auf false

myProperty: { 
    type: Boolean, 
    value: false 
} 

und stellen Sie dann das Attribut myProperty wahr zu machen.

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

Dieses Thema ist in einigen Fragen des Polymer-Projektes diskutiert, zum Beispiel here und here.

Das zweite Problem erwähnt auch eine Problemumgehung, indem eine Eigenschaft des Typen Object verwendet. Da diese Eigenschaften mit JSON.parse deserialisiert werden, können Sie einen booleschen Wert mit my-property="false" und my-property="true" angeben.

+0

Interessant! Danke für Ihre ausführliche Antwort. –

Verwandte Themen