標籤:測試 doc import 返回 images 案頭 onload 通過 回調
sciter處理指令碼tiscript,用於處理UI互動中的一些邏輯,跟js很像,但又有點區別,對前端熟悉的人應該能很快上手。
tiscrip指令碼文檔
https://sciter.com/developers/sciter-docs/script/
dom類文檔
https://sciter.com/developers/sciter-docs/dom-classes/
demo4.go代碼如下:
package main;import ("github.com/sciter-sdk/go-sciter""github.com/sciter-sdk/go-sciter/window""log""fmt")//設定元素的處理常式func setElementHandlers(root *sciter.Element) {btn1, _ := root.SelectById("btn1");//處理元素簡單點擊事件btn1.OnClick(func() {fmt.Println("btn1被點擊了");});//這裡給元素定義的方法是在tiscript中進行調用的//並且作為元素的屬性進行訪問btn1.DefineMethod("test", func(args ...*sciter.Value) *sciter.Value {//我們把從傳入的參數列印出來for _, arg := range args {//String()把參數轉換成字串fmt.Print(arg.String() + " ");}//返回一個空值return sciter.NullValue();});btn2, _ := root.SelectById("btn2");//調用在tiscript中定義的方法data, _ := btn2.CallMethod("test2", sciter.NewValue("1"), sciter.NewValue("2"), sciter.NewValue("3"));//輸出調用方法的傳回值fmt.Println(data.String());}//設定回調func setCallbackHandlers(w *window.Window) {//CallbackHandler是一個結構,裡面定義了一些方法//你可以通過實現這些方法,自訂自已的回調cb := &sciter.CallbackHandler{//載入資料開始OnLoadData: func(p *sciter.ScnLoadData) int {//顯示載入資源的urifmt.Println("載入:", p.Uri());return sciter.LOAD_OK;},//載入資料過程中OnDataLoaded: func(p *sciter.ScnDataLoaded) int {fmt.Println("載入中:", p.Uri());return sciter.LOAD_OK;},};w.SetCallback(cb);}//定義函數func setWinHandler(w *window.Window) {//定義函數,在tis指令碼中需要通過view對象調用//定義inc函數,返回參數加1w.DefineFunction("inc", func(args ...*sciter.Value) *sciter.Value {return sciter.NewValue(args[0].Int() + 1);});//定義dec函數,返回參數減1w.DefineFunction("dec", func(args ...*sciter.Value) *sciter.Value {return sciter.NewValue(args[0].Int() - 1);});}//測試調用函數func testCallFunc(w *window.Window) {//調用tis指令碼中定義的函數data, _ := w.Call("sum", sciter.NewValue(10), sciter.NewValue(20));fmt.Println(data.String());root, _ := w.GetRootElement();//我們也可以指定元素調用函數data, _ = root.CallFunction("sum", sciter.NewValue(50), sciter.NewValue(100));fmt.Println(data.String());}func main() {//建立一個新視窗w, err := window.New(sciter.DefaultWindowCreateFlag, sciter.DefaultRect);if err != nil {log.Fatal(err);}w.LoadFile("demo4.html");//設定標題w.SetTitle("事件處理");//設定回調處理常式setCallbackHandlers(w);//擷取根項目root, _ := w.GetRootElement();//設定元素處理常式setElementHandlers(root);//設定視窗處理常式setWinHandler(w);//測試調用函數testCallFunc(w);//顯示視窗w.Show();//運行視窗,進入訊息迴圈w.Run();}
demo4.html代碼如下:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>事件處理</title></head><body> <button id="btn1">點我</button> <button id="btn2">點我2</button> <button id="btn3">點我3</button> <button id="btn4">點我4</button> <script type="text/tiscript"> //view是一個全域的視圖對象,root是載入的根項目 var root = view.root; //通過self.$()方法選擇元素,類似jquery的$ //self.$()這裡面參數不要加雙引號 //我們調用在go中為btn1定義的方法 $(#btn1).on("click", function() { //this指向的當前元素 this.test("參數1", "參數2", "參數3"); }); //在go中也可以調用我們在tis中為btn2定義的方法 $(#btn2).test2 = function(a, b, c) { return String.printf("我是tis中為btn2定義的方法test2 %v %v %v", a, b, c); }; //我們定義一個函數(注意函數與方法的區別) //這裡的函數並沒有指定屬於哪個對象 function sum(num1, num2) { return num1 + num2; } //調用go中定義的函數 $(#btn3).on("click", function() { view.msgbox(#alert, view.dec(5)); }); $(#btn4).on("click", function() { view.msgbox(#alert, view.inc(5)); }); </script></body></html>
go語言使用go-sciter建立案頭應用(三) 事件處理,函數與方法定義,go與tiscript之間相互調用