Ui Interaction - 使用ScriptDb值更新文本框

时间:2012-11-02 17:26:36

标签: google-apps-script

我正在尝试将从ScriptDb检索到的值加载到使用GUI Builder构建的界面中开发的界面应用程序中。我通过以下方式加载了界面:

var app = UiApp.createApplication();
app.add(app.loadComponent("ScriptDBUi"))

现在已经加载了我想在文本框中加载值来显示ScriptDb值,但是当我尝试使用setValuesetText时,我被告知属性无法更改或修改。

您能否指出我能够与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返回字符串值),或者我已经提示我无法分配或修改值。

感谢您提供的任何见解。

2 个答案:

答案 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时运行的函数。”

干杯