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>

最后的显示结果如下:

我的数据库表数据如下:

原文地址:https://www.cnblogs.com/jkko123/p/10837729.html

时间: 2024-10-08 23:56:56

go语言使用go-sciter创建桌面应用(八) 窗口显示时,自动加载后端数据。的相关文章

spark1.4加载mysql数据 创建Dataframe及join操作连接方法问题

首先我们使用新的API方法连接mysql加载数据 创建DF import org.apache.spark.sql.DataFrame import org.apache.spark.{SparkContext, SparkConf} import org.apache.spark.sql.{SaveMode, DataFrame} import scala.collection.mutable.ArrayBuffer import org.apache.spark.sql.hive.HiveC

Macbook的android studio创建project时,加载gradle慢的解决办法

需要在android studio 中配置gradle的代理. 我的android studio版本1.2.1: 打开preferences->build, execution, deployment->build tools->gradle->Gradle VM Options: -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8087 设置生成功后,重启androidstudio ,速度会非常快.

VS2012创建WebForm项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。

解决方案: 使用VS2012开发,都要装NuGet插件(官网:http://nuget.org),进官网点安装就进入了微软的下载页面, 选择vs2012版本的NuGet.Tools.vsix文件,双击安装就可以了.下载地址如下: https://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c

go语言使用go-sciter创建桌面应用(七) view对象常用方法,文件选择,窗口弹出,请求

view对象的详细文档请看: https://sciter.com/docs/content/sciter/View.htm demo9.html代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>view对象学习</title> <style> .br { width: 100%;

创建、加载高级网格和几何体

1.对象合并 使用THREE.Group对象作为组合对象,调用它的add函数附加其他几何体.如下面的代码,创建了两个几何体sphere.cube,然后调用group的add函数,把两个几何体组合在一起.代码中的redraw函数在最后调用了position.BoundingBox()函数,用来定位组合体对象的位置.在positionBoundingBox函数中调用了setFromeObject并且返回了一个THREE.Box3对象.这里先不介绍这个对象,直接看后面的代码,通过box.max和box

IOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用

一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; // 返回第component有多少行 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;

Android Handler 异步消息处理机制的妙用 创建强大的图片加载类

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 最近创建了一个群,方便大家交流,群号:55032675 上一篇博客介绍了Android异步消息处理机制,如果你还不了解,可以看:Android 异步消息处理机制 让你深入理解 Looper.Handler.Message三者关系 .那篇博客的最后,提出可以把异步消息处理机制不仅仅是在MainActivity中更新UI,可以用到别的地方,

SpringMvc的创建流程以及2种加载配置文件的方式

1.首先创建个web项目,第一步导入相应的jar包,并且buildtoPath 2.用elipse或myeclipse点击进入web.xml中 按住 Alt+ / 有个提示 找到前面带 #DispatcherServlet 并按回车键,自动生成. 按我这个方式对比修改一下,首先解释一下, <load-on-startup>1</load-on-startup> load-on-startup标记容器是否在启动的时候实例化并调用其init()方法的优先级. 它的值表示servlet应

iOS开发之控制器创建与加载(生命周期)

1.如何创建一个控制器 控制器常见的创建方式有以下几种: (1)通过storyboard创建 (2)直接创建 MJViewController *mj = [[MJViewController alloc] init]; (3)指定xib文件来创建 MJViewController *mj = [[MJViewController alloc] initWithNibName: @"MJViewController" bundle:nil]; 注意,创建xid后还要设置xid中哪个vi