2013-02-14 38 views
1

我在Google電子表格中有一個登錄表單,允​​許我登錄到外部應用程序。我的電子表格允許我不斷與外部應用程序通信,以便我可以使用它執行task1,task2等。我需要驗證我是否已登錄外部應用程序,然後才能執行task1或task2。Apps腳本:將回調傳遞給ServerHandler的回調

所以我的使用情況是:

  1. 用戶調用TASK1
  2. 我的代碼檢查他是否已經登錄。如果沒有,會彈出登錄表單。
  3. 然後窗體首先檢查登錄,然後調用task1。
  4. 稍後,用戶調用task2。
  5. 我的代碼需要再次檢查相同的場景才能顯示登錄表單。
  6. 我的表單再一次檢查用戶的登錄憑證,這次調用task2。

這裏是我的代碼的外觀:

function invokeTask1() 
{ 
    //if user not logged in 
     loginForm("performTask1"); 
    //else 
     performTask1();//works fine. 
} 

我的登錄表單是這樣的:

function loginForm(sCallbackFn) 
{ 
    //Code to create UiInstance and populate it with username and password fields 
    //for now, I tried hidden field storing callback for me. 
    var hdnCallback = app.createHidden("executeAfterLogin", sCallbackFn).setName("proceedWithExecution"); 
    //then I already have ServerHandler for Ok Button Click 
    var handler = app.createServerHandler('OkButtonEvent'); 
    handler.addCallbackElement(abcPanel); 
    btnOk.addClickHandler(handler); 
} 

然後我OkButtonEvent是這個地方我檢查登錄,然後執行相應任務:

function OkButtonEvent(e) 
{ 
    //code to pick out e.parameter values and check login on external server application 
    //I don't know how to invoke e.parameter.proceedWithExecution here. 
    //This has failed to run without any errors though. 
    eval(e.parameter.proceedWithExecution); 
} 

最後,我有這些:

function performTask1()//and also performTask2() 
{ 
    //doing something. But not getting invoked via login form's ServerHandler. 
} 

回答

0

嘗試this[e.parameter.proceedWithExecution]();

這不是一個問題了UiApp本身雖然 - 這只是你如何通過字符串名稱在JavaScript調用的函數。