go語言使用go-sciter建立案頭應用(三) 事件處理,函數與方法定義,go與tiscript之間相互調用

來源:互聯網
上載者:User

標籤:測試   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之間相互調用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.