【发布时间】:2018-07-25 03:26:58
【问题描述】:
我正在尝试创建一个按钮,该按钮在单击时“保存”来自已连接排序的多个列表的位置。我希望脚本能够在刷新页面时保留每个列表项的最新位置(,即如果列表 1 以 A、B、C 开头,我将其更改为 B、A、C 并刷新页面,它保持为 B、A、C。)。
我试图通过从 html 文档(作为 Web 应用程序发布)创建一个数组来完成此操作,使用 getUserProperities 函数保存它,然后在我下次打开 Web 应用程序时返回它。
我可以毫无问题地记录职位,但我无法确定在哪里运行 getUserProperities 函数,或者我可能正在处理什么其他问题。
在 Web 应用程序的控制台中,我收到此错误 Uncaught TypeError: Cannot read property 'getUserProperties' of undefined at saveList (userCodeAppPanel:4) at HTMLButtonElement.onclick (userCodeAppPanel:1)。
我应该在哪里调用getUserProperties 函数?来自code.gs 或index.html?我一直在研究HERE提供的示例。
我的代码的相关部分来自index.html,如下所示。
<script>
$( function() {
$( "#myList, #flight1a, #flight1b, #flight2a, #flight2b, #flight3a, #flight3b, #sortable2" ).sortable({
connectWith: ".connectedSortable",
update: function(event, ui) {
var changedList = this.id;
var order = $(this).sortable('toArray');
var positions = order.join(';');
console.log({
id: changedList,
positions: positions
});
}
})
});
</script>
<script>
function saveList() {
google.script.run.PropertiesService.getUserProperties().setProperty('myProperty', JSON.stringify(positions));
var returnedObj = PropertiesService.getUserProperties("myProperty");
returnedObj = JSON.parse(returnedObj);
}
</script>
</head>
<body>
<button onclick="saveList()">Click me</button>
【问题讨论】:
-
Apps Script natives,如
PropertiesService仅在 Apps Script 服务器环境的上下文中可用。您需要创建从客户端代码调用的服务器端函数foo(...)。在您的服务器功能中,您将设置/获取相关项目。 -
不要忘记查看有关客户端服务器通信的 Apps 脚本指南 - 它们会非常有帮助。
-
我确实浏览了该指南,这就是为什么我认为我需要从客户端调用它并使用 google.script.run,但我不确定如何获得这两个方面来回通信和共享数据。我不确定服务器端函数需要返回什么才能使 PropertiesService 实际运行,所以我尝试直接从客户端执行此操作。这澄清了一些。
标签: javascript jquery jquery-ui google-apps-script