Riot.js最強的功能,莫過於自訂標籤,先來一段程式碼,看個效果:
[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> <!-- 调用自定义标签 --> <timer start="10"></timer> </body> <!-- 最前面一定要有空格或TAB,留意它的type --> <script type="riot/tag"> <timer> <h3>Times: { index }</h3> this.index = opts.start || 0; var self = this; tick(){ // 每个1秒,index自增 this.index++; // 调用this.update更新UI【最欣赏这个了,能自己控制】 this.update(); } var timer = setInterval(this.tick, 1000); </timer> </script> <!-- 调用riot,启动自定义标签timer --> <script type="text/javascript"> riot.mount("timer"); </script> </html>
效果如下[每個1秒,times的值,就+1]:
說一下,新人會遇到的坑:
script type=”riot/tag”
compiler會遍歷所有帶有script type=”riot/tag” 的元素,如果script有src,則會加載外部的文件,如果沒有src,則編譯script裡的內容。
PS: script所寫的內容,必須是空格或tab開頭,如果直接跟著 “
這跟它內部的解析器有關【第一次還挺坑的…】
tick()
該函數的this對象,是當前的自定義標籤的context,只要xx(){} 這樣聲明的函數,context都被指定為標籤的context
可透過this.tick存取tick 函數
this.update
必須呼叫this.update(); UI的內容才會更新。
可能會覺得沒其它MV*的引擎自動化,但是,手動控制返回會更加靈活
opts
程式碼中,有個很奇怪的變數opts:
[code]this.index = opts.start || 0;其實它的值,就是this. opts,是自訂標籤傳入的屬性。
[code]<timer start="10"></timer>那 this.opts.start/opts.start 就等於 10
支援引用外部標籤定義檔
[code]<script src="todo.tag" type="todo/tag"></script>
todo.Aps一】自訂標籤的內容,更多相關內容請關注PHP中文網(www.php.cn)!