Google Script Dapatkan nilai kotak teks UI

Saya telah membuat GUI sederhana dengan 2 kotak teks dan 1 tombol. Pengendali tombol berjalan seperti di bawah ini

function handleButton1(e) 
{
    var app = UiApp.getActiveApplication();
    var v1 = e.parameter.TextBox1;
    var v2 = e.parameter.TextBox2;
    Logger.log(v1);
    app.getElementById("TextBox1").setText(v2);
    app.getElementById("TextBox2").setText(v1);
    return app;
}

Saat saya menjalankan aplikasi, nilai kotak teksnya adalah TextBox1 dan TextBox2. Saat menekan tombol maka kedua nilai kotak teks yang ditampilkan tidak ditentukan. Di mana saya salah.


person user2035041    schedule 02.02.2013    source sumber


Jawaban (1)


Dengan pengendali klik sisi server, Anda perlu menyertakan nilai secara eksplisit dalam peristiwa pengendali dengan menggunakan .addCallbackElement(). Jika Anda melakukannya, nilai saat ini dari elemen bernama yang Anda tambahkan akan disertakan dalam event yang dikirimkan ke handler Anda.

Karena Anda melihat undefined, kemungkinan Anda tidak menambahkan panggilan balik. Anda harus memiliki sesuatu seperti ini dalam definisi UI Anda:

var handler = app.createServerHandler('handleButton1')
                 .addCallbackElement(textBox1)
                 .addCallbackElement(textBox2);
button.addClickHandler(handler);

Nama elemen akan digunakan untuk memberi label nilai panggilan balik (.setName()), sedangkan id akan digunakan untuk mengakses elemen di handler Anda (.setId()).

Inilah versi skrip Anda yang berfungsi:

function doGet() {
  var app = UiApp.createApplication();

  var textBox1 = app.createTextBox().setName("TextBox1").setId("TextBox1");
  var textBox2 = app.createTextBox().setName("TextBox2").setId("TextBox2");
  var button = app.createButton('Swap Contents');
  app.add(textBox1).add(textBox2).add(button);

  var handler = app.createServerHandler('handleButton1')
                   .addCallbackElement(textBox1)
                   .addCallbackElement(textBox2);
  button.addClickHandler(handler);

  return app;
}

function handleButton1(e) 
{
  //Logger.log(JSON.stringify(e));
  var app = UiApp.getActiveApplication();
  var v1 = e.parameter.TextBox1;
  var v2 = e.parameter.TextBox2;
  app.getElementById("TextBox1").setText(v2);
  app.getElementById("TextBox2").setText(v1);
  return app;
}
person Mogsdad    schedule 17.07.2013