2

私はこれに対する解決策を思い付くことができないあらゆる場所を検索しました。ユーザーが「送信」をクリックするたびに、このコードにグラフを表示させようとしています(その部分は機能します)。問題は、ユーザーが送信を複数回クリックすると発生します。チャートを複数回表示します。最後のチャートを削除して新しいチャートで更新するにはどうすればよいですか?

function doGet() {
  var uiApp = UiApp.createApplication().setTitle("some title");

  var grid = uiApp.createGrid(3, 2);
  grid.setWidget(0, 0, uiApp.createLabel('Lablel 1'));
  grid.setWidget(1, 0, uiApp.createLabel('Lablel 2'));

  var panel = uiApp.createVerticalPanel();

  panel.add(grid);

  var button = uiApp.createButton('submit');
  var handler = uiApp.createServerHandler('b');
  handler.addCallbackElement(grid);
  button.addClickHandler(handler);

  panel.add(button);
  uiApp.add(panel);

  return uiApp;
 }

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

  //gets all my chart data
  var chart = getchartdata()

  //Add chart
  app.add(chart)

  var uiApp = UiApp.getActiveApplication();
  uiApp.close();

  return uiApp;
}
4

2 に答える 2

5

最も簡単な方法は、グラフ用に別のパネルを用意し、グラフを追加する前に毎回それをクリアすることです。VerticalPanel ウィジェットには、使用できる remove メソッドもあります。私が提案した最初のオプションについては、以下のコードを参照してください

function doGet(){
  /* All your other code here */
  uiApp.add(panel);
  var chartPanel = uiApp.createVerticalPanel().setId('chartPanel'); 
  uiApp.add(chartPanel);

  return uiApp;
}

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

  //gets all my chart data
  var chart = getchartdata()

  /* Clear chart Panel */
  var chartPanel = app.getElementById('chartPanel');
  chartPanel.clear(); 

  //Add chart
  chartPanel.add(chart)

  var uiApp = UiApp.getActiveApplication();
  uiApp.close();

  return uiApp;
}

PS: 同じことに対して app と uiApp という 2 つの異なる変数がある理由がわかりません。あなたの場合ではありませんが、混乱や問題を引き起こす可能性があります。

于 2012-09-02T07:03:59.933 に答える