2015-08-28 48 views
5

我在暴動js中沒有那麼多的經驗。其中我創建標籤層次就像如何將變量傳遞給使用暴亂的子標記js

<tag-1> 
    <tag-2> 
     <tag-3> 
     </tag-3> 
    </tag-2> 
</tag-1> 

現在我需要傳遞變量(whcih包含JSON)「標記-3」,並在該變量如何更新「標籤3」的每一次更新。現在我安裝「標籤3」之類

riot.mount('tag-3', { comm: "Hello" }); 

其中「COMM」是可變的,後安裝可變「COMM」是不是在標籤訪問「標籤-3」,它顯示未定義。另一件事,每個標籤html都在一個單獨的「.tag」中,並且使用該標籤調用其他標籤,如在「tag-1.tag」文件中調用「tag-2」文件,並在「tag-2.tag」我打電話給「tag-3」,在「tag-2.tag」文件中,我正在安裝「tag-3」

我該怎麼做?

回答

5
  1. 您不需要在其他riot標籤中加載標籤 - 只需要掛載根標籤。這就是爲什麼你的comm參數不會將其存入tag-3

  2. 您可以在一個.tag文件中包含多個標籤定義。標籤文件編譯完成後,裏面的riot標籤是否從多個標籤文件加載並不重要。

  3. 您可以將變量作爲標記屬性傳遞 - 它們將在opts變量下可用。

把所有在一起,你的單個標籤文件可以是這樣的:

<tag-1> 
    <p>This is my TAG1</p> 
    <tag-2 comm="{ commValue}"></tag-2> 

    <script> 
    this.commValue = { text: 'My text' } 
    </script> 
</tag-1> 

<tag-2> 
    <p>This is my TAG2 with comm: { opts.comm.text }</p> 

    <script> 
    this.on('update', function() { 
     // you can use 'opts.comm' here 
    }); 

    </script> 
</tag-2> 
1

聽起來以爲COMM的價值將不斷隨時間變化。如果這是真的,那麼最好的辦法是在現有標籤之間發送消息的riot.observable()機制。

  1. 無論引起價值變化的標籤都會「觸發」您選擇的消息 - 可能是'value_changed'。

    riot.observable().trigger('value_changed', {comm: newValueOfComm})

  2. 你的標籤-3將 「聽」 爲 'value_changed' 的消息,並以此爲基礎進行一些東西。

    riot.observable().on('value_changed', function(data) { console.log("new value=" + data.comm); })

對於工作示例,請查看 「機制2」: http://vinapps.com/riot-cookbook-app/#/pages/between-page

的參考頁是在這裏: http://riotjs.com/api/observable/