我正在尝试将从ScriptDb检索到的值加载到使用GUI Builder构建的界面中开发的界面应用程序中。我通过以下方式加载了界面:
var app = UiApp.createApplication();
app.add(app.loadComponent("ScriptDBUi"))
现在已经加载了我想在文本框中加载值来显示ScriptDb值,但是当我尝试使用setValue
或setText
时,我被告知属性无法更改或修改。
您能否指出我能够与UI元素进行交互的正确方向?
这是一些额外的代码:
function ReadScriptDb() {
var DB = ScriptDb.getMyDb();
var Ob = DB.query({Number: "0002"}).next();
var Ui = doGet()
var TextBox = Ui.getElementById("Project")
TextBox.setText(Ob.Project)
}
function doGet() {
var app = UiApp.createApplication();
app.add(app.loadComponent("ScriptDBUi"));
return app;
}
然后我将这个简单的脚本发布为Web App,以便我可以测试Ui。发布之后我将根据我的更改得到2件事中的一件:1 - 文本块不会更新返回的值(..我已调试以确保Ob.Project返回字符串值),或者我已经提示我无法分配或修改值。
感谢您提供的任何见解。
答案 0 :(得分:0)
你可以在这里阅读更多相关信息 -
https://developers.google.com/apps-script/gui_builder#extending
您的代码看起来像这样(未经测试)
var app = UiApp.createApplication();
app.add(app.loadComponent("ScriptDBUi"))
var textBox = app.getElementById("myTextBoxName");//ID you gave in the GUI builder
textBox.setText("Hello world");
编辑 -
在回调函数中,您需要使用UiAp.getActiveApplcation而不是createApplication
Your code should be this -
function ReadScriptDb() {
var DB = ScriptDb.getMyDb();
var Ob = DB.query({Number: "0002"}).next();
var Ui = UiApp.getActiveApplication();//CHANGED THIS
var TextBox = Ui.getElementById("Project")
TextBox.setText(Ob.Project)
}
function doGet() {
var app = UiApp.createApplication();
app.add(app.loadComponent("ScriptDBUi"));
return app;
}
答案 1 :(得分:0)
感谢Arun的帮助。最后,我不理解代码处理的顺序。这就是最终的结果。基本上(..而且相当愚蠢的我)我没有调用ReadScriptDb,因为我不明白doGet()是我的应用程序的入口点。我将'app'传递给了我的ReadScriptDb函数,然后又回到了doGet,一切都运行良好。谢谢你的方式。
function ReadScriptDb(app) {
var DB = ScriptDb.getMyDb();
var Ob = DB.query({Number: "0002"}).next();
var Project = Ob.Project;
var TextBox = app.getElementById("Project");
TextBox.setText(Project);
return app;
}
function doGet() {
var app = UiApp.createApplication();
app.add(app.loadComponent("ScriptDBUi"));
ReadScriptDb(app)
return app;
}
此参考资料有助于我清除它: UI Service
“.. doGet函数是用户访问部署脚本的URL时运行的函数。”
的干杯强> 的