2013-12-15 175 views
0

如何使用google-apps-script的ToggleButton?Google Apps腳本ToggleButton用法

toggleButton doc 介紹瞭如何獲取信息,如鼠標位置或在它的事件處理程序的各種修飾鍵的狀態,但我仍然無法找出非常基本的 - 如何獲取切換按鈕的狀態,並使用它。

請幫我完成下面的示例,以便ToggleButton在倒計時或倒計時(到目前爲止鍵入的字符,或剩餘的字符數允許)之間切換。

var max = 124; 

function doGet() { 
    var app = UiApp.createApplication(); 
    var panel = app.createVerticalPanel(); 
    var text = app.createTextArea().setName("text"); 
    var handler = app.createServerHandler("count").addCallbackElement(panel); 
    var toggleButton = app.createToggleButton('So far', 'Remaining').setId('btn'); 
    app.add(panel); 
    panel.add(text); 
    panel.add(toggleButton); //Add a UI Widget 
    panel.add(app.createButton("Count", handler)); 
    panel.add(app.createLabel("0 characters").setId("label")); 
    return app; 
} 

function count(e) { 
    var app = UiApp.createApplication(); 
    // Because the text area was named "text" and added as a callback element to the 
    // button's click event, we have its value available in eventInfo.parameter.text. 
    var text; 
    if (e.parameter.btn == true) { 
    text = "counting up"; 
    } else { 
    text = "counting down"; 
    } 
    app.getElementById("label").setText(e.parameter.text.length + " characters, " + text); 
    return app; 
} 

謝謝你的回答。我仍然在努力利用它的一部分,因爲我現在真的是通過示例來學習。我已經將我的代碼更改爲您的代碼,並加入了嘗試使用它的努力。但是,每次單擊「計數」按鈕時,都會看到文本長度發生更改,但toggleButton的結果不會切換。

感謝

+0

正如我所說的,返回的值是一個字符串...所以你要加引號爲「true」 :-) –

+0

還要注意的是,你可以在你的textBox使用keyUpHandler而不是計數按鈕和擺脫計數按鈕,以簡化您的佈局,使用戶界面更容易使用...(這只是一個建議) –

+0

「結果是字符串布爾」,我認爲這是'Logger.log'的結果上下文...其實這已經是我的第二次猜測了,我的第一個猜測是'if(e.parameter.btn){'。對不起,密集。非常感謝你的幫助。 FTR,我確實需要一個Button來處理我的真實情況。這只是一個簡單的情況。再次感謝。 – xpt

回答

1

奇怪的是,你可以使用獲得價值其ID(通常我們不得不使用小部件Name如你所說)

我修改了一下加入了panel牽你的代碼全部小部件,所以我有一個callbackElement分配給處理程序。 我顯示了在Logger.log切換按鈕的結果,因爲我不知道最終的目的,並沒有覺得像想象一個代碼,沒有;-)

注:e.parameter.btn返回的值是一個字符串表示「真」 或 「假」 如常用於具有邏輯狀態窗口小部件...

test code here with result shown

var max = 124; 

function doGet() { 
    var app = UiApp.createApplication(); 
    var panel = app.createVerticalPanel(); 
    var text = app.createTextArea().setName("text"); 
    var handler = app.createServerHandler("count").addCallbackElement(panel); 
    var toggleButton = app.createToggleButton('So far', 'Remaining').setId('btn'); 
    app.add(panel); 
    panel.add(text); 
    panel.add(toggleButton); //Add a UI Widget 
    panel.add(app.createButton("Count", handler)); 
    panel.add(app.createLabel("0 characters").setId("label")); 
    return app; 
} 

function count(e) { 
    var app = UiApp.createApplication(); 
    // Because the text area was named "text" and added as a callback element to the 
    // button's click event, we have its value available in eventInfo.parameter.text. 
    app.getElementById("label").setText(e.parameter.text.length + " characters"); 
    Logger.log(e.parameter.btn); 
    return app; 
} 

:布爾值的編輯:這裏是你的代碼修改爲你想要的工作(注意e.parameter.btn值和新的處理程序觸發器上的「」) - 演示代碼更新。

var max = 124; 

function doGet() { 
    var app = UiApp.createApplication(); 
    var panel = app.createVerticalPanel(); 
    var handler = app.createServerHandler("count").addCallbackElement(panel); 
    var text = app.createTextArea().setName("text").setPixelSize(180,100).addKeyUpHandler(handler); 
    var toggleButton = app.createToggleButton('So far', 'Remaining').setId('btn'); 
    app.add(panel); 
    panel.add(text); 
    panel.add(toggleButton); //Add a UI Widget 
    panel.add(app.createLabel("0 characters").setId("label")); 
    return app; 
} 

function count(e) { 
    var app = UiApp.createApplication(); 
    var toggle = e.parameter.btn == "false";// this way I convert the string value in a "real" boolean 
    if(toggle){ 
    app.getElementById("label").setText(e.parameter.text.length + " characters (toggle btn = "+e.parameter.btn+')'); 
    }else{ 
    app.getElementById("label").setText(max-Number(e.parameter.text.length) + " characters (toggle btn = "+e.parameter.btn+')'); 
    } return app; 
} 
+0

謝謝Serge,請看我更新的問題。 – xpt