2012-12-28 33 views
-1

由於GAS文檔實際上很糟糕,我認爲我可能會嘗試至少發現有關傳遞給甚至處理程序的參數的信息。這個微不足道的例子顯示了我想要做什麼。GAS - 在運行時發現信息

MyGui是使用Gui構建器構建的。
它包含一個按鈕 - btn,它們有一個點擊回調 - btn_click 它還包含一個文本區域 - txtArea1

simples

function doGet() { 
    var app = UiApp.createApplication(); 
    app.add(app.loadComponent("MyGui")); 
    return app; 
} 

function btn_click(e) { 

    var app = UiApp.getActiveApplication(); 
    var ta = app.getElementById('txtArea1'); 

    if(!e) 
    { 
    ta.setText('null object'); 
    } 
    else 
    { 
    ta.setText(e.toDebugString()); 
    } 

    return app; 
} 

我傻!我認爲,由於文檔重複說GAS組件是建立在GWT之上的,而GWT是基於Java的,所以EVERYTHING是一個java.lang.Object,我應該能夠調用toDebugString()來查找至少一些關於對象傳入處理函數。

對不起,我是非常接近使用GAS放棄,它只是一個玩具,現在,我沒有時間玩,其實我有工作要做。

回答

0

你有沒有在GUI Builder中將一個回調元素關聯到按鈕?如果將按鈕放在FormPanel中,則所有FormPanel的字段都作爲參數提交,如果它是一個簡單的按鈕,則必須添加回調元素才能獲取GUI Builder中的事件參數,事件下的小白盒會觸發在事件。

+0

是的,我知道如何生成一個回調,並且回調被調用,然而,這不是我的問題。 問題是,如何知道參數中有什麼可用 - 這在任何地方都沒有記錄(反正我可以找到)。 此外,爲什麼上面提供的代碼沒有工作。 e.toDebugString失敗。 – SmittyBoy

1

我記得一個庫SmartDebug,它允許在UI中記錄對象。添加庫,並嘗試這個辦法:

function doGet() { 
var app = UiApp.createApplication(); 
    SmartDebug.enable(true); 
    SmartDebug.addLogWidgetToApplication(); 
    app.add(app.loadComponent("MyGui")); 
    return app; 
} 

function btn_click(e) { 
    var app = UiApp.getActiveApplication(); 
    if(!e) { 
    SmartDebug.logMessage('null'); 
    } else { 
    SmartDebug.logObject(e,'event'); 
    } 
    return app; 
} 

這裏就是我的了:了UiApp的

11:19:55: event.parameter.clientY: 161 
11:19:55: event.parameter.clientX: 143 
11:19:55: event.parameter.eventType: click 
11:19:55: event.parameter.ctrl: false 
11:19:55: event.parameter.meta: false 
11:19:56: event.parameter.source: Button1 
11:19:56: event.parameter.button: 1 
11:19:56: event.parameter.alt: false 
11:19:56: event.parameter.screenY: 270 
11:19:57: event.parameter.screenX: 143 
11:19:57: event.parameter.y: 18 
11:19:57: event.parameter.shift: false 
11:19:57: event.parameter.x: 92 
+0

有趣。看起來,e正在作爲類型'事件'傳遞給SmartLogger。該類型在哪裏記錄? 如果您將其作爲類型「對象」傳遞,會發生什麼? – SmittyBoy

1

的客戶端是GWT小部件。我們沒有任何地方說過,服務器端由GWT Java對象組成(它不是),根據他們如何記錄工作情況,甚至都沒有意義。服務器對象不過是對客戶端對象的引用 - 您可以用來將命令與其關聯的引用,然後發送到客戶端。沒有調試信息,因爲服務器「窗口小部件」除了他們正在存儲命令的客戶端窗口小部件的ID之外沒有任何信息。

+0

啊。好的,我猜想我的根本誤解。謝謝 – SmittyBoy

+0

UiApp絕對是一個快速開發工具,而不是100%全功能的工具包。如果你想更好地控制UI代碼,可以在HtmlService中使用jQuery。 –

0

您可以使用標準的Javascript toSource方法來調試某些對象。如果您調試創建新Web應用程序腳本時得到的默認示例代碼,以下是ToSource提供的內容:

({參數:{clientY:「22」,clientX:「17」,eventType:「click 「,ctrl:」false「,meta:」false「,來源:」u29169455861「,按鈕:」1「,alt:」false「,screenY:」148「,screenX:」381「,y:」18「,轉向:「假」,X:「13」}})

+0

謝謝,非常有幫助。 – SmittyBoy