2016-01-13 7 views
5

ho bisogno di un attributo che può avere valore pari a zero (0)Riot.js 2: Abilità con valore falsy

modello Rivolta:

<my-tag time="{ time }"> 

this.time = condition ? '10' : '0' 

</my-tag> 

risultato desiderato:

<my-tag time="0"></my-tag> 

Tuttavia, Riot omette automaticamente l'intero attributo se ha il valore di falsa:

mia soluzione attuale:

this.on('updated',() => { 
    $(this.root).attr('time', this.time) 
}) 

In altre parole, ho bisogno attributo time avere un valore esatto di time proprietà.

Edit:

appare come questa è cambiato da 2.2.4.

Demo with Riot 2.2.4

questo funziona come ci si aspetta - entrambi i tag hanno reso attributo time con secondo valore

Demo with Riot 2.3.13

questo viene a mancare - tag con attributo impostato su false ha tutta attributo rimosso

+0

Non sono sicuro che si può mettere espressioni su un tag personalizzato nella sua definizione. Non puoi mettere l'espressione su qualche nodo interno? Inoltre, solo gli attributi booleani (ad esempio selezionato, selezionato) vengono rimossi se il loro valore è falsy (http://riotjs.com/guide/#expressions). – Antoine

+0

@Antoine: sì, è possibile inserire espressioni nel tag personalizzato stesso. funziona come escluso. metterlo su qualche nodo interno ha lo stesso effetto. –

+0

è strano, non riesco a riprodurre il problema sui nodi figli (usando la v2.2.4, non l'ultima). Non sto usando il compilatore (simile al flusso di lavoro di gihrig), quindi non posso testare il tag stesso. – Antoine

risposta

0

Try prefisso il tuo attributo con "riot-"

<my-tag riot-time="{ time }"> 

Ho avuto un problema simile

<div class="fldr" data-stat="{ s }"> 

Quando s = 0, rende come

<div class="fldr"> 

Questo ha funzionato nel mio caso

<div class="fldr" riot-data-stat="{ s }"> 

Si noti che non sto usando il compilatore riot, scrivo il Javascript che il compilatore dovrebbe produrre, potreste dover bypassare il compilatore Riot affinché funzioni. Guarda il tuo my-tag.js compilato e vai da lì.

docs Riot API su riot.tag() http://riotjs.com/api/#manual-construction

1

Questo sta lavorando in tumulto v2.3.18:

<my-tag time="{ time ? '10' : '0'}"> 
    <script> 
    this.time = false; 
    </script> 
</my-tag> 

genererà

<my-tag time="0"></my-tag>