2016-01-13 4 views
5

Ich brauche ein Attribut zu haben, die den Wert Null (0) haben könnenRiot.js 2: Attribut mit falsy Wert

Bereitschafts Vorlage:

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

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

</my-tag> 

Gewünschtes Ergebnis:

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

Riot schaltet jedoch automatisch das ganze Attribut aus, wenn es einen falschen Wert hat:

<my-tag></my-tag> 

Meine aktuelle Problemumgehung:

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

Mit anderen Worten, ich brauche time Attribut genauen Wert von time Eigenschaft zu haben.

Edit:

Sieht aus wie dies seit 2.2.4 geändert hat.

Demo with Riot 2.2.4

dies funktioniert wie erwartet - beide Tags Attribut time mit nach Wert

verdient gemacht haben

Demo with Riot 2.3.13

dies nicht gelingt - tag mit Attribute auf false hat ganzes Attribut entfernt

+0

Ich bin nicht sicher, können Sie setzen Ausdrücke in einem benutzerdefinierten Tag in seiner Definition. Kannst du den Ausdruck nicht auf einen inneren Knoten legen? Außerdem werden nur boolesche Attribute (z. B. überprüft, ausgewählt) entfernt, wenn ihr Wert falsy ist (http://riotjs.com/guide/#expressions). – Antoine

+0

@Antoine: Ja, Sie können Ausdrücke in benutzerdefinierte Tags selbst einfügen. es funktioniert wie freigestellt. Auf einen inneren Knoten zu setzen hat denselben Effekt. –

+0

das ist komisch, ich kann das Problem nicht auf Kindern Knoten reproduzieren (mit v2.2.4, nicht die neueste). Ich benutze den Compiler nicht (ähnlich dem Workflow von gihrig), daher kann ich das Tag selbst nicht testen. – Antoine

Antwort

0

Try Präfix Ihr Attribut mit "Riot-"

Ich hatte ein ähnliches Problem

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

Wenn s = 0, macht als

<div class="fldr"> 

Das in meinem Fall arbeitete

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

Beachten Sie, dass ich nicht der bin mit Ich schreibe das Javascript, das der Compiler erzeugen würde, vielleicht müssen Sie den Riot-Compiler umgehen, damit das funktioniert. Schau dir einfach deine kompilierten my-tag.js an und geh von dort.

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

1

Dies ist in Aufruhr v2.3.18 arbeiten:

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

generiert

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