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之间相互调用的更多相关文章
- 200-Java语言基础-Java编程入门-005 | Java方法定义及使用
一.方法概述和格式说明 为什么要用方法: 提高代码的复用性 什么是方法: 完成特定功能的代码块 方法的格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) { 方 ...
- Ubuntu创建桌面快捷方式
默认情况下,ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,只需要右键-复制-桌面 就Ok,如图: 上面的方法是通过系统自 ...
- Windows中创建桌面快捷方式
Windows中创建桌面快捷方式 -------------- -------------- -------------- --------------
- robot创建桌面图标(转载)
桌面ride图标,安装之后会自动创建(偶尔也会创建失败),创建桌面图标方法如下: 1. 新建快捷方式 在桌面右击鼠标,弹出的菜单选择 新建-快捷方式 ,然后在"请键入对象"的位置输 ...
- Qt之创建桌面和开始菜单快捷方式
将安装好的酷狗拷贝到C:\data目录中 1.创建桌面快捷方式 QFile::link("C:/data/KuGou.exe", QStandardPaths::writableL ...
- Swift3.0语言教程使用编码创建和初始化字符串
Swift3.0语言教程使用编码创建和初始化字符串 使用编码创建和初始化字符串 创建和初始化字符串除了可以使用上文中提到的方法外,还可以使用init(coder:)方法,此方法一般不常使用,其语法形式 ...
- Swift3.0语言教程使用指针创建和初始化字符串
Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例 ...
- Swift3.0语言教程使用字符串创建和初始化字符串
Swift3.0语言教程使用字符串创建和初始化字符串 Swift3.0语言教程使用字符串创建和初始化字符串,在编程语言中,字面值是很常见的数据描述形式.人们可以通过字面所表达的意思,获知其含义,尤其是 ...
- WPF 创建桌面快捷方式
#region 创建桌面快捷方式 string deskTop = System.Environment.GetFolderPath(System.Environment.SpecialFolder. ...
随机推荐
- Servlet开发
源地址:http://www.cnblogs.com/xdp-gacl/p/3760336.html 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun ...
- debian9 下编译安装tengine2.2.1
首先下载tengine的源码包,这个大家都会下载吧 wget http://tengine.taobao.org/download/tengine-2.2.1.tar.gz 然后解压缩 tar zxf ...
- VUE 计算属性 vs 侦听属性
计算属性 vs 侦听属性 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性.当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过 ...
- 关于C# WinForm中进度条的实现方法
http://www.cnblogs.com/Sue_/articles/2024932.html 进度条是一个软件人性化考虑之一,他给用户的感觉就是程序内部在不停的动作,执行到了什么程度,而不是整个 ...
- js数组对象--数据格式的转换(字符串,对象的取值与赋值)
材料:提供一份数据:arr=[ {value:335, name:'直接访问'}, {value:310, name:'邮件营销'}, {value:234, name:'联盟广告'}, {value ...
- ubuntu去除带锁文件的锁 sudo chown 用户名 目标文件夹/ -R
sudo chown 用户名 目标文件夹/ -R sudo chown han dir/ -R
- JAVAWEB 一一 userweb2(升级,servlet版,jstl和el)
创建数据库和表 首先,创建一个web项目 然后引入jar包(jstl.jar和standard.jar是jstl和el包,在jsp页面中需要手动加 <%@ taglib uri="ht ...
- android布局管理器
1 LinearLayout (线性布局) 让所有的组件都成为单一的方向,机垂直的或水平的(默认). android:Layout_weight //该属性控制水平和垂直方向某个控件所占比例. 2.F ...
- CentOS6开启BBR加速
BBR TCP加速,Google出品神器,需 kernel 4.9以上.开启后服务器的访问明显快很多,对于vultr和digitalocean这种国外服务器很适合,感觉使用后Shell输入也没那么卡了 ...
- IDEA配置 gradle
下载解压自己需要的gradle版本:https://gradle.org/releases/(免安装) 配置环境变量 打开命令窗口,输入 gradle -v IDEA配置gradle:file-&g ...