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

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

個人數據庫表數據以下:數據庫

相關文章
相關標籤/搜索