go语言使用go-sciter创建桌面应用 事件处理,函数与方法定义,go与tiscript之间相互调用
Posted 两脚任从行处来,一灵常与气相随。有时四大熏熏醉,借问青天我是
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言使用go-sciter创建桌面应用 事件处理,函数与方法定义,go与tiscript之间相互调用相关的知识,希望对你有一定的参考价值。
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 { //显示加载资源的uri fmt.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函数,返回参数加1 w.DefineFunction("inc", func(args ...*sciter.Value) *sciter.Value { return sciter.NewValue(args[0].Int() + 1); }); //定义dec函数,返回参数减1 w.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之间相互调用的主要内容,如果未能解决你的问题,请参考以下文章
go语言使用go-sciter创建桌面应用 事件处理,函数与方法定义,go与tiscript之间相互调用
go语言使用go-sciter创建桌面应用 ui元素查找,增加,删除,修改