2016-01-13 37 views
5

我需要具有可以具有零(0)值的屬性Riot.js 2:屬性與falsy值

防暴模板:

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

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

</my-tag> 

期望的結果:

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

但是,Riot會自動忽略整個屬性,如果它具有falsy值:

<my-tag></my-tag> 

我目前的解決方法:

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

換句話說,我需要time屬性有time財產的確切價值。

編輯:

貌似自從2.2.4這種情況已經改變。

Demo with Riot 2.2.4

此按預期工作 - 這兩個標籤都呈現屬性time與根據價值

Demo with Riot 2.3.13

失敗 - 標籤與屬性設置爲false有全屬性中刪除

+0

我不知道,你可以把定義中的自定義標籤上的表達式。你不能把表達式放在一些內部節點上嗎?此外,如果它們的值爲falsy,則只會刪除布爾屬性(例如,checked,selected)(http://riotjs.com/guide/#expressions)。 – Antoine

+0

@Antoine:是的,你可以在自定義標籤中放置表達式。它可以作爲例外。將它放在一些內部節點上具有相同的效果。 –

+0

這很奇怪,我不能重現兒童節點上的問題(使用v2.2.4,而不是最新的)。我沒有使用編譯器(類似於gihrig的工作流程),所以我無法測試標籤本身。 – Antoine

回答

0

嘗試在屬性前加上「riot-」

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

我有一個類似的問題

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

當S = 0時,呈現爲

<div class="fldr"> 

這個工作在我的情況

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

注意,我沒有使用暴亂編譯器,我編寫了編譯器會生成的Javascript,你可能必須繞過Riot編譯器才能工作。只要看看你編譯的my-tag.js並從那裏開始。

上riot.tag()http://riotjs.com/api/#manual-construction

1

這在騷亂v2.3.18工作防暴API文檔:

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

會產生

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