go語言使用go-sciter創建桌面應用(八) 窗口顯示時,自動加載后端數據。


有些時候我們需要在窗口創建並顯示時,加載一些后端的配置,這就需要用到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>

最后的顯示結果如下:

我的數據庫表數據如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM