有些時候咱們須要在窗口建立並顯示時,加載一些後端的配置,這就須要用到view提供的幾個事件。php
https://sciter.com/docs/content/sciter/View.htm
statechange 狀態改變時,最大化,最小化,顯示,隱藏,會觸發事件回調。html
activate 窗口激活或停用時,能夠理解爲獲取焦點或失去焦點,觸發事件回調。mysql
demo.go的代碼以下:git
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的代碼以下:github
<!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>
最後的顯示結果以下:sql
個人數據庫表數據以下:數據庫