2015-07-02 13 views
5

Ho un elemento 1.0 personalizzato polimero che ha una proprietà di tipo booleano, con valore di default impostato a true:Polymer 1.0 proprietà booleana avendo valore di default è impostata su true

myProperty: { 
     type: Boolean, 
     value: true 
    } 

Nella mia unità-test ho un'istanza di questo personalizzati elemento con my-property impostato su 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); 
}) 

Il test dell'unità ha esito negativo. elem.myProperty è impostato su true quando mi aspetterei che sia falso. Perchè è questo?

risposta

12

Il comportamento delle proprietà booleane has changed in Polymer 1.0 e ora segue le specifiche degli attributi booleani HTML. La proprietà è impostata su true se l'attributo esiste sull'elemento (indipendentemente dal valore dell'attributo) e non avviene la deserializzazione se l'attributo non è specificato. Quindi non è possibile impostare una proprietà booleana su false se inizialmente era vera.

È possibile impostare solo il valore predefinito della proprietà su false

myProperty: { 
    type: Boolean, 
    value: false 
} 

e quindi impostare l'attributo di fare myProperty vero.

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

Questo argomento è discusso in alcuni aspetti del progetto Polymer, ad esempio here e here.

Il secondo problema menziona anche una soluzione alternativa utilizzando una proprietà di tipo Object. Poiché queste proprietà sono deserializzate con JSON.parse, è possibile specificare un valore booleano con my-property="false" e my-property="true".

+0

Interessante! Grazie per la tua risposta dettagliata. –

Problemi correlati