2

ボタンが押された回数を追跡するスクリプトを作成したいと思います。javascriptが静的変数をサポートしていないことはよく知られていますが、これは通常、ターゲット関数の外部で変数を定義することで回避できます。

それにもかかわらず、これは単純なgoogleスクリプティングWebアプリケーションでは機能しません。コードは次のとおりで、テンプレートWebアプリケーションの単純な拡張です。

誰もがこれをどのように達成できるか知っていますか?

これはグーグルアプリケーションのコードです:

// Script-as-app template.

function doGet() {
  var app = UiApp.createApplication();
  var button = app.createButton('Click Me');
  app.add(button);
  var label = app.createLabel('The button was clicked.')
                 .setId('statusLabel')
                 .setVisible(false);
  app.add(label);
  myClickHandler.counter = 0;

  var handler = app.createServerHandler('myClickHandler');
  handler.addCallbackElement(label);
  button.addClickHandler(handler);

  return app;
}

function myClickHandler(e) {
  var app = UiApp.getActiveApplication();

  var label = app.getElementById('statusLabel');
  label.setVisible(true);
  label.setText('Clicked ' + myClickHandler.counter + ' times.')
  myClickHandler.counter++;
  //app.close();
  return app;
}
4

1 に答える 1

2

これを実現する方法はいくつかあります。値を保持するために非表示のウィジェットを使用する方法の 1 つを次に示します。

function doGet(){
  var app = UiApp.createApplication();
  var button = app.createButton('Click Me');
  app.add(button);
  var counterValue = 0;
  var label = app.createLabel('The button was clicked.')
                 .setId('statusLabel')
                 .setVisible(false);
  var counter = app.createHidden('counter').setId('counter').setValue(counterValue)               
  app.add(label).add(counter);

  var handler = app.createServerHandler('myClickHandler');
  handler.addCallbackElement(counter);
  button.addClickHandler(handler);

  return app;
}

function myClickHandler(e) {
  var app = UiApp.getActiveApplication();

  var label = app.getElementById('statusLabel');
  label.setVisible(true);
  var counterValue = Number(e.parameter.counter)
  var counter = app.getElementById('counter')
  counterValue++;
  counter.setValue(counterValue.toString())
  label.setText('Clicked ' + counterValue + ' times.')
  return app; 
}
于 2012-10-06T07:25:22.427 に答える