每個自訂標籤從編譯到構建,到最後的銷毀,riot.js都提供了相應的事件。
內建有4種事件:
update
在標籤真正刷新UI前執行。它允許我們在更新UI之前,改寫context的資料
updated
在標籤UI更新之後執行。這時候,我們可以對dom進行操作了
mount
在標籤建置完成,放在頁面後面執行。
unmount
當標籤從頁面移除的時候執行。 【一般是呼叫this.unmount()時執行】
打個例子:
[code]<!Doctype html> <html> <head> <meta charset="utf-8" /> <script type="text/javascript" src="riot.js"></script> <script type="text/javascript" src="compiler.js"></script> </head> <body> <todo></todo> </body> <!-- 最前面一定要有空格或TAB --> <script type="riot/tag"> <todo> <p>一个自定义标签 BY { title || "" }</p> // 监听4种事件 // 执行顺序,跟绑定顺序无关 this.on("updated", function(){ // 这里可以操纵DOM console.log("updated"); }).on("mount", function(){ console.log("mount"); }).on("unmount", function(){ console.log("unmount"); }).on("update", function(){ // 这里可以注入数据 this.title = "da宗熊"; console.log("update"); }); </todo> </script> <script type="text/javascript"> riot.mount("todo"); </script> </html>
效果如下:
輸出分別為: update -> updated -> mount
;
所以沒印出unmount
事件的綁定,也可以類似jquery一樣,一次綁定多個事件,又或者自己去觸發事件
綁定多個:
[code]this.on("update mount", function(){ // update和mount都会经过这里 });
新手遇坑:
unmount事件,在this.unmount()之後觸發,或者自定義標籤,重新構建時,自動觸發
[code]this.trigger("update", "参数1", "参数2"...);
[code]riot.mount("todo"); riot.mount("todo"); // 第二次会先触发unmount,然后才是update/updated/mount這一點跟jquery是大大的不一樣
以上就是riot.js學習【三】事件的內容,更多相關內容請關注PHP中文網(www.php.cn)!