2

ScriptDb から取得した値を、GUI ビルダーで構築されたインターフェイス内で開発されたインターフェイス アプリケーションにロードしようとしています。次の方法でインターフェイスをロードしました。

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;
}

次に、Ui をテストできるように、この単純なスクリプトを Web アプリとして公開しました。公開後、私の変更に応じて 2 つのうちの 1 つが得られます。値を割り当てたり変更したりできないというメッセージが表示されました。

あなたが提供できる洞察に感謝します。

4

2 に答える 2

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");

編集 -

コールバック関数では、createApplicationの代わりにUiAp.getActiveApplcationを使用する必要があります

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;
}
于 2012-11-02T18:44:13.003 に答える
0

アルン、助けてくれてありがとう。結局、コードが処理された順序を理解していませんでした。これが最終的にそれをしたことです。基本的に (..そして私の愚かなことに)、doGet() がアプリのエントリ ポイントであることを理解していなかったため、ReadScriptDb を呼び出していませんでした。「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 サービス

「..doGet 関数は、スクリプトが展開されている URL にユーザーがアクセスしたときに実行される関数です..」

乾杯

于 2012-11-03T13:59:07.490 に答える