有些時候我們需要在窗口創建並顯示時,加載一些后端的配置,這就需要用到view提供的幾個事件。
https://sciter.com/docs/content/sciter/View.htm
statechange 狀態改變時,最大化,最小化,顯示,隱藏,會觸發事件回調。
activate 窗口激活或停用時,可以理解為獲取焦點或失去焦點,觸發事件回調。
demo.go的代碼如下:
package main
import (
"fmt"
"log"
"path/filepath"
"database/sql"
"encoding/json"
_ "github.com/go-sql-driver/mysql"
"github.com/sciter-sdk/go-sciter"
"github.com/sciter-sdk/go-sciter/window"
)
type User struct {
Name string `json:"name"`;
Pwd string `json:"pwd"`;
}
func defFunc(w *window.Window) {
//注冊dump函數方便在tis腳本中打印數據
w.DefineFunction("dump", func(args ...*sciter.Value) *sciter.Value {
for _, v := range args {
fmt.Print(v.String() + " ");
}
fmt.Println();
return sciter.NullValue();
});
//定義函數,用於tis腳本中加載用戶名和密碼
w.DefineFunction("LoadNameAndPwd", func(args ...*sciter.Value) *sciter.Value {
//連接數據庫
db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/test?charset=utf8");
if err != nil {
fmt.Println(err);
}
//關閉數據庫
defer db.Close();
//查詢一行數據
name := "";
pwd := "";
rows := db.QueryRow("select name,pwd from tb_users where id = ?", 1);
rows.Scan(&name, &pwd);
//構建一個json
user := User{Name: name, Pwd: pwd};
data, _ := json.Marshal(user);
//將json返回,tis腳本中接收該值
return sciter.NewValue(string(data));
});
}
func main() {
w, err := window.New(sciter.SW_TITLEBAR|
sciter.SW_RESIZEABLE|
sciter.SW_CONTROLS|
sciter.SW_MAIN|
sciter.SW_ENABLE_DEBUG,
nil);
if err != nil {
log.Fatal(err);
}
//加載文件
filepath, _ := filepath.Abs("./demo.html");
err = w.LoadFile(filepath);
//設置標題
w.SetTitle("加載數據");
//定義函數
defFunc(w);
//顯示窗口
w.Show();
//運行窗口,進入消息循環
w.Run();
}
demo.html的代碼如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
</head>
<body>
用戶名:<input type="text" id="name" value="">
<br>
密碼:<input type="text" id="pwd" value="">
</body>
<script type="text/tiscript">
//窗口被激活或停用時,觸發回調,可以理解為獲得焦點
view.on("activate", function(type) {
//調用go中定義的方法LoadNameAndPwd
var data = view.LoadNameAndPwd();
//解析json,轉換成對象
data = JSON.parse(data);
$(#name).value = data.name;
$(#pwd).value = data.pwd;
});
//窗口狀態發生改變時,觸發回調,最大化,最小化,隱藏,顯示
view.on("statechange", function() {
//調用go中定義的方法LoadNameAndPwd
var data = view.LoadNameAndPwd();
//解析json,轉換成對象
data = JSON.parse(data);
$(#name).value = data.name;
$(#pwd).value = data.pwd;
});
</script>
</html>
最后的顯示結果如下:

我的數據庫表數據如下:

