不兼容的类型作为通过加载GUI组件创建的参数传入。

时间:2013-01-27 21:45:52

标签: google-apps-script

我在使用Google电子表格构建的用户界面时出现问题。我将首先解释一下它是如何工作的,而不是我将解决的问题。 UI是连接到SQL数据库的相当简单的程序,它允许用户创建新记录,查询,搜索和呈现报告。我在GUI构建器中创建了所有面板(例如介绍页面,创建记录)。当用户浏览UI时,我将使用我希望用户看到的新面板交换网格。例如,在介绍页面上有一个创建按钮,当用户单击按钮时,其中介绍面板被替换为创建记录面板的网格。我为用户查询/搜索数据创建了两种方法。第一种方法是在介绍面板中选择一个数字范围,然后单击“查询”按钮。这将比查询最后10个左右的记录到GUI构建的Panel中,我称之为MainForm。第二种方式是“搜索”一份工作。在介绍页面上有一个搜索按钮,当用户点击按钮它进入一个新页面;网格切换到搜索面板。在新页面/面板上,用户可以输入一些参数进行搜索。用户单击搜索按钮后,程序应将搜索结果加载到MainForm中,方法与从介绍页面查询时相同。我已将整个功能逐行分开,所以我确信问题与加载面板/组件有关。我的意思是这几行代码。

  var Component = app.loadComponent("MainForm");
  var panel = app.createVerticalPanel().setSize("770px", "900px").add(Component);
  app.getElementById("contentGrid").setWidget(0,0, panel);

但为什么它会在一个案例中加载,而在另一个案例中却没有?它也不是加载Component的方法,而是返回面板/组件。

总结一下,当我使用查询功能加载Component时,它可以工作,但是当我在搜索功能中加载Component时,我得到并且错误:作为参数传入的不兼容类型。此外,我在其他两个函数中加载MainForm组件,并且它大部分时间都可以工作,但有时我得到相同的错误。

1 个答案:

答案 0 :(得分:1)

我认为你的方法并不理想,load component不应该被多次调用。将所有面板放在同一个组件中并使用每个面板的可见性来按需显示/隐藏它们会更有效率。应将每个面板插入垂直面板,以便“旧面板”在“旧面板”隐藏时滑到其位置。

此方法的一个示例是shown in this post来模拟标签,可以轻松地根据您的需求进行调整。

顺便说一句,这个方法也非常快速和快速响应,因为完整的UI从一开始就准备就绪; - )