【发布时间】:2026-01-19 20:30:02
【问题描述】:
所以,我正在使用 Google Apps Script 做一个小项目,以便从中添加/导出潜在客户...不那么痛苦。
我打算怎么做?
我计划通过添加一些Actions 菜单来实现这一点,用于导入和导出潜在客户。目前,假定导入的工作表与该脚本绑定到的 Google 工作表具有相同的列。 (我们稍后可以支持一些表格列转换功能,但它可能是我的用例的 YAGNI。)导出的表格将从该表格的列转换为一些简化的、准备发送到邮件的列。
我打算如何编写此代码(或如何编写代码)?
我正在使用 MVVM 设计模式,昨晚一直在为我需要的所有内容编写 MVVM 包装器(牢记 KISS)。
MenuItemViewModels 有一些name,functionName 和Google Apps Script seem to be looking for。我注意到有一些主要的痛苦限制:Google Apps 脚本需要函数 NAME 并且 它不能是方法!
好的,给我看一些代码或gtfo
我有一些SpreadsheetPageViewModel,看起来像这样:
class SpreadsheetPageViewModel extends BaseViewModel {
init() {
this.exportVM = new ExportSpreadsheetEditViewModel();
this.importVM = new ImportSpreadsheetEditViewModel();
this.menuVM = new MenuViewModel(new MenuModel(),
[
'exportLeads', // this is utility function. I want/need to use openExport method
'importLeads', // this is utility function. I want/need to use openImport method
]);
this.childEditVM = null;
}
openExport() {
this.childEditVM = this.exportVM;
this.childEditVM.view.doShow();
}
openImport() {
this.childEditVM = this.importVM;
this.childEditVM.view.doShow();
}
}
在单击菜单项时生成的模式的业务逻辑将存在于子视图模型中:ExportSpreadsheetEditViewModel 和 ImportSpreadsheetEditViewModel。
我试图通过这个 hack 绕过限制:
变化
function onOpen(event) {
// show the menu here....
new SpreadsheetPageView().doShow();
}
类似于:
var mainView;
function onOpen(event) {
mainView = new SpreadsheetPageView();
// show the menu here....
mainView.doShow();
}
然后,在MenuActionUtils.gs 中,沿着mainView 向下爬行,例如:
function exportLeads() {
mainView.viewModel.showExport();
}
function importLeads() {
mainView.viewModel.showImport();
}
那次黑客攻击的结果是什么?
没有用。为什么?因为当 Google Apps 脚本触发 exportLeads(或 importLeads)时,mainView 不再被定义!!
这是否意味着我必须放弃我的方法? 如何在菜单项的 onClick 中使用主视图/视图模型? 如果失败了,有没有办法使用这种 MVVM 设计模式(以及一些 HTML/React/....)来创建我们的菜单并将其注入?
【问题讨论】:
-
人们反对并投票关闭这个?!这个问题如何让他们想要这样做?!
-
这在 SO 中值得一些空间。这篇文章最初总结了这个问题,以至于它阐明了在谷歌脚本应用程序生态系统中开发时事物如何工作和不工作的性质,并特别指出了谷歌的开发人员文档根本没有涵盖的内容:在这个空间中开发时发生的事情是一个微妙而重要的细节,你应该在部署现场之前知道......我的解决方案涉及转换为功能主义,以便映射函数减少数组从谷歌表单元返回到管道并再次输出到用户界面
标签: javascript google-apps-script google-sheets design-patterns mvvm