Json 关于扩大天然气电子表格用途的问题
我想提供一个机会,在电子表格、侧边栏和理想情况下的另一种HTML窗口中查看相同数据的输出,例如,使用JavaScript库创建输出。 我制作的非谷歌版本是一个带有iFrame的网页,可以调整大小、拖动和打开/关闭iFrame,最重要的是,它们的内容在顶部窗口中共享相同的记录对象。因此,我相信,也许很天真,类似的东西可以在这个已建立且流行的应用程序中作为一种选择。 至少,TBA试验向我展示了查看和操纵来自其中任何一方的信息是有用的。导航大型建筑项目、克隆房间和楼层,以及结合JSON记录(存储在类似仓库中)进行协作工作的功能对我来说尤其令人鼓舞Json 关于扩大天然气电子表格用途的问题,json,google-apps-script,three.js,Json,Google Apps Script,Three.js,我想提供一个机会,在电子表格、侧边栏和理想情况下的另一种HTML窗口中查看相同数据的输出,例如,使用JavaScript库创建输出。 我制作的非谷歌版本是一个带有iFrame的网页,可以调整大小、拖动和打开/关闭iFrame,最重要的是,它们的内容在顶部窗口中共享相同的记录对象。因此,我相信,也许很天真,类似的东西可以在这个已建立且流行的应用程序中作为一种选择。 至少,TBA试验向我展示了查看和操纵来自其中任何一方的信息是有用的。导航大型建筑项目、克隆房间和楼层,以及结合JSON记录(存储在类似
我曾尝试对不同的HTML文件使用侧边栏,但事实上只有一个保持打开状态并不是很有用,坦率地说,共享记录对象仍然是我无法理解的。这就是主要问题。谷歌人是否会考虑额外的窗口类型可能有点野心勃勃,但我认为值得一问。 < P>在GAS中实现全局变量的最好方法是通过USER属性或脚本属性。如果您只想处理一个对象,请将它们写入一个对象,然后对该对象进行json.stringify(并使用json.parse将其取回)。您无法在调用HtmlService时维护全局变量。当您启动在浏览器中运行的HtmlService实例时,启动该实例的服务器端代码将退出 在HtmlService代码中,从这一点来说,控制就是客户端。然后,如果启动服务器端函数(使用google.script.runfromclient-side),则会启动服务器端脚本的新实例,而没有前一个实例的内存,这意味着所有全局变量都会重新初始化 有许多技术可以在调用之间验证值
- 当然,最简单的方法是首先将其传递给htmlservice,然后将其作为参数传递回服务器端google.script.run
- 另一种方法是使用属性服务保存您的值,当您返回时,这些值仍然存在,但最大条目大小为9k
- 如果您需要更多的空间,那么缓存服务可以在一个条目中容纳100k,并且您可以以相同的方式使用它(尽管有一点可能会被清除掉——尽管我从来没有这样做过)
- 如果您需要更多的空间,可以使用一些技术来压缩和/或将单个对象分散到多个缓存项中,如本文所述。同样的方法也支持GoogleDrive,如果您需要将数据保存更长时间,则支持GoogleCloud存储
然而,在您的特定示例中,您想要的全局数据似乎是从外部api调用获取的。在任何情况下,为什么不在客户端检索它呢?如果您需要在it服务器端执行某些操作,请使用google.script.run将其传递给服务器。窗口。打开和窗口。postMessage()解决了上述两个问题 我希望你能从截图和代码中得到保证,Google sheets的实用性可以扩展到公共利益。其核心是输入、复制和查看文本数据的两种方法——通过一组数据进行切片的电子表格,以及用于在轨迹(x轴)和分支(y轴)中导航关联的TBA,以及用于处理当前选择中需要注意的方面(z轴),这些方面在协作中需要来自不同兴趣的关注 因此,例如,护士会发现TBA对记录患者检查的许多方面很有用,而药剂师可能会发现电子表格对库存控制更有用。两者都将数据记录在一个公共对象中,我称之为“nset”(命名集的层次结构),保存在云中,并可在协作活动中分发 TBA对于克隆大型记录集也很有用。例如,可以在一个楼层上复制一个带有家具的房间,然后可以为一个完整的塔楼复制带有房间的楼层 通过postMessage在多个监控窗口中维护并行nset对象意味着以不同形式的多媒体显示相同数据的无与伦比的机会,包括交互式动画、增强现实、数控机床指令、物联网控制 以下是相关代码: 从侧栏中的TBA:
window.addEventListener("message", receiveMessage, false);
function openMonitor(nset){
var params = [
'height=400',
'width=400'
].join(',');
let file = 'http://glasier.hk/blazer/model.html';
popup = window.open(file,'popup_window', params);
popup.moveTo(100,100);
}
var popup;
function receiveMessage(event) {
let ed,nb;
ed = event.data;
nb = typeof ed === "string"? ed : nb[0];
switch(nb){
case "Post":
console.log("Post");
popup.postMessage(["Refreshing nset",nset], "http:glasier.hk");
break;
}
}
function importNset(){
google.script.run
.withSuccessHandler(function (code) {
root = '1grsin';
trial = 'msm4r';
orig = 'ozs29';
code = orig;
path = "https://api.myjson.com/bins/"+code;
$.get(path)
.done((data, textStatus, jqXHR) => {
nset = data;
openMonitor(nset);
cfig = nset.cfig;
start();
})
})
.sendCode();
}
从弹出窗口:
$(document).ready(function(){
name = $(window).attr("name");
if(name === "workshop"){
tgt = opener.location.href;
}
else{
tgt = "https://n-rxnikgfd6bqtnglngjmbaz3j2p7cbcqce3dihry-0lu-script.googleusercontent.com"
}
$("#notice").html(tgt);
opener.postMessage("Post",tgt);
$(window).on("resize",function(){
location.reload();
})
})
}
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
let ed,nb;
ed = event.data;
nb = typeof ed === "string"? ed : ed[0];
switch(nb){
case "Post": popup.postMessage(["nset" +nset], "*"); break;
default :
src = event.origin;
notice = [ed[0]," from ",src ];
console.log(notice);
// $("#notice").html(notice).show();
nset = ed[1];
cfig = nset.cfig;
reloader(src);
}
}
我应该解释一下,侧边栏的html部分是在localhost研讨会上构建的,所有样式和脚本都编译成一个文件,以便粘贴到侧边栏html文件中。此外,还提供了研讨会。Google目标由postMessage中的event.origin提供。这将不得不发给任何希望制作不同显示器的人。现在,我刚刚用Three.js制作了3D建模监视器
我认为,经过大量的研究和提问,这应该是正确的答案。你的问题是什么?根据你的帖子很难判断你想做什么。主要问题是如何维护一个全局变量,该变量在应用程序的不同部分执行操作后更新。我刚刚遇到了一个似乎有助于解决问题的方法,谢谢,但这里有两个问题。首先,传递的字符不能超过50000个,但更重要的是,如果在模型视图中使用该字符串移动三维对象,则会出现多个字符串化/分段