2012-11-02 25 views
2

我試圖從ScriptDb中將檢索到的值加載到使用GUI生成器構建的界面中開發的界面應用程序中。我已經通過加載接口:Ui交互 - 使用ScriptDb值更新文本框

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應用程序,所以我可以測試的用戶界面。發佈後,根據我的更改,我將獲得2件事中的1件:1 - 文本塊不會使用返回的值進行更新(爲了確保Ob.Project正在返回字符串值,我們已經調試過該值),或者我有人提示我不能分配或修改一個值。

感謝您提供的任何見解。

+0

你能分享更多的代碼不工作的?你想要調用setValue或setText?應用程序本身或組件? –

+0

也許我對工作流程的理解是關閉的。這裏是我所做的測試和學習: – mriemen

+0

以下是我迄今爲止所做的: - 創建了一個腳本項目, - 創建了簡單的腳本來讀寫scriptdb, - 然後我使用Gui構建器構建了一個Ui, - 我現在試圖與該用戶界面中的文本框進行交互。 – mriemen

回答

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而不是創建應用程序

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

感謝Arun的幫助。最後,我並不瞭解代碼處理的順序。這到底是怎麼回事?基本上(...而且愚蠢的我)我沒有調用ReadScriptDb,因爲我不瞭解doGet()是我的App的入口點。我將'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

「..The的doGet功能是當用戶在訪問該腳本部署的URL運行一個。」

乾杯