go语言使用go-sciter创建桌面应用(九) 通过view.window创建新窗
发布时间:2021-05-21 08:15:59 所属栏目:大数据 来源: https://www.jb51.cc
导读:前端通过view.window创建新窗口后,如何在新窗口中加载后端数据,主要有两种方法: 1、通过在go里面使用DefineFunction定义方法,供前端使用,来获取数据。 2、前端使用view.request请求接口,来获取后端数据。 ? main.go的代码如下: package mainimport (j
前端通过view.window创建新窗口后,如何在新窗口中加载后端数据,主要有两种方法: 1、通过在go里面使用DefineFunction定义方法,供前端使用,来获取数据。 2、前端使用view.request请求接口,来获取后端数据。 ? main.go的代码如下: package main import ( json2 "encoding/json" "github.com/sciter-sdk/go-sciter" "github.com/sciter-sdk/go-sciter/window" "github.com/tidwall/gjson" "log" "path/filepath" ) type Person struct { Name string `json:"name"` Age uint8 `json:"age"` } //定义函数 func setWinHandler(w *window.Window) { //定义函数,在tis脚本中需要通过view对象调用 w.DefineFunction("getData",func(args ...*sciter.Value) *sciter.Value { json := args[0].String() //获取前端传来的下标 index := gjson.Get(json,"index") //数据,这里模拟从数据库中得到的数据 persons := []Person{ { Name: "aaa",Age: 11,},{ Name: "bbb",Age: 22,{ Name: "ccc",Age: 33,} var data []Person if index.Int() == -1 { data = persons } else { data = []Person{persons[index.Int()]} } b,_ := json2.Marshal(data) return sciter.NewValue(string(b)) }) } func main() { //创建window窗口 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) } //注意这个地方,sciter较新的版默认的情况下禁用了非安全脚本功能 w.SetOption(sciter.SCITER_SET_SCRIPT_RUNTIME_FEATURES,sciter.ALLOW_FILE_IO| sciter.ALLOW_SOCKET_IO| sciter.ALLOW_SYSINFO) //加载文件 path,_ := filepath.Abs("./demo1.html") w.LoadFile(path) //设置标题 w.SetTitle("你好,世界") //设置窗口处理程序 setWinHandler(w) //显示窗口 w.Show() //运行窗口,进入消息循环 w.Run() } demo1.HTML代码如下: <!DOCTYPE html> <html lang="zh-CN"> <head> <Meta charset="UTF-8"> <style> .br { width: 100%; border: 1px solid #ccc; margin: 10px auto; } </style> </head> <body> <div class="br"> <button id="win1">窗口</button> </div> <script type="text/tiscript"> //新窗口 $(#win1).on("click",function() { var win1 = view.window({ type: View.TOOL_WINDOW,url: self.url("simple.html"),x: 200,y: 200,width: 400,height: 400,client: false,state: View.WINDOW_SHOWN,//窗口标题 caption: "新窗口",alignment: 3,}); }); </script> </body> </html> simple.html的代码如下: <!DOCTYPE html> <html lang="zh-CN"> <head> <Meta charset="UTF-8"> <style> .br { display: inline-block; padding: 2px; border: 1px solid #ccc; background: #fff; text-align: center; } </style> </head> <body> <div> <ul id="list"> <li></li> </ul> <a href="#" class="page br" data-index="0">1</a> <a href="#" class="page br" data-index="1">2</a> <a href="#" class="page br" data-index="2">3</a> <a href="#" class="ajax br">ajax</a> </div> </body> <script type="text/tiscript"> view.root.on("ready",function() { //注意这里getData方法,我们是在主窗口注册的 //通过view.window创建的子窗口,我们需要通过view.parent访问父级来调用getData var params = {}; params.index = -1; var data = view.parent.getData(JSON.stringify(params)); //解析从后台传来的数据 data = JSON.parse(data); if (data) { var html = ""; for(var (k,v) in data) { html += "<li>" + v.name + "---" + v.age + "</li>"; } $(#list).html = html; } }); self.on("click",".page",function() { var index = this.attributes["data-index"]; var params = {}; params.index = index; var data = view.parent.getData(JSON.stringify(params)); data = JSON.parse(data); if (data) { var html = ""; for(var (k,".ajax",function() { view.request({ type: #get,url: "http://127.0.0.1",protocol: #basic,params: { "test": "test" },//设置返回数据类型为json output: #json,//成功回调函数 success: function(data,status) { if (data) { var html = ""; for(var (k,v) in data) { html += "<li>" + v.name + "---" + v.age + "</li>"; } $(#list).html = html; } },//失败回调函数 error: function(err,status) { view.msgBox(#alert,err); } }); }); </script> </html> 说明,http://127.0.0.1?返回的数据是我用PHP输出的一些json数据,可以随便模拟。 结果如下:
(编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |