1

このアプリ スクリプトのアイデアは、リストボックス LbxJobTypes で選択された項目に基づいて、リストボックス LbxJob を設定することです。

e.parameter.LbxJobType の未定義の値を取得しています。これは、LbxJob の条件付きの作成を妨げているようです。

ハードコーディング(JobType = T300_JOB_TYPEを設定)JobTypeValueHandler関数とLbxJobsリストボックスが期待どおりに入力されることにより、ハンドラー(JobTypeValueHandler)のテストに成功しました。

e.parameter.source を確認すると、「LbxJobType」が表示されます。リストボックスは GUI ビルダーで作成されました。

var T200_JOB_TYPE = 1;
var T300_JOB_TYPE = 2;

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

  app.add(app.loadComponent("BasicCalculator"));
  var Dischandler = app.createServerHandler('DiscClickHandler');
  app.getElementById('chbxDiscl').addValueChangeHandler(Dischandler);    
  return app;
 }


function DiscClickHandler(e) {
  var app = UiApp.getActiveApplication();   
  var Discpanel = app.getElementById('FLpnlDisc');

  BCalcSetup(app);
  Discpanel.setVisible(false);  
  return app;
}


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

  return app;
}


function BCalcSetup(app){
  var BCalcpanel = app.getElementById('APnlBCalc');  
  var lbxJobType = app.getElementById('LbxJobType'); 
  var JobTpyehandler = app.createServerChangeHandler('JobTypeValueHandler'); 
  var lbxJobs = app.getElementById('LbxJobs'); 

  JobTpyehandler.addCallbackElement(lbxJobType);
  lbxJobType.addChangeHandler(JobTpyehandler);
  lbxJobType.addItem('Title 200');
  lbxJobType.addItem('Title 300');
  loadClassifications(lbxJobs,T200_JOB_TYPE);
  BCalcpanel.setVisible(true);  
}


function JobTypeValueHandler(e) {
  var app = UiApp.getActiveApplication();  
  var JobType=T200_JOB_TYPE;
  var lboxJobs=app.getElementById('LbxJobs');  

  if (e.parameter.LbxJobType=='Title 300'){JobType=T300_JOB_TYPE;}
  loadClassifications(lboxJobs,JobType);
  app.close();
  return app;
}


function loadClassifications(lbox,JobType){ 
  var spreadsheet = SpreadsheetApp.openById(SPREADSHEET_ID);

  lbox.clear();
  if (JobType==T300_JOB_TYPE){
    var T3data =spreadsheet.getRangeByName('Title300Jobs').getValues();  
    for (var row1 = 1; row1 < T3data.length; row1++) {
      lbox.addItem(T3data[row1]);
    }
  }else{   
    var T2data =spreadsheet.getRangeByName('Title200Jobs').getValues();  
    for (var row2 = 1; row2 < T2data.length; row2++) {
      lbox.addItem(T2data[row2]);  
    }
  } 
}
4

1 に答える 1

0

ちょっとばかげているように感じますが、これを理解しました。私が抱えていた問題は、GUI ビルダーでインターフェイスを作成したときに、これらのリストボックスの Name プロパティを入力しなかったことです。GUI ビルダーに戻り、各ボックスの name プロパティを入力したところ、チャンピオンのように機能するようになりました。生活し、学びます

于 2012-10-19T17:44:53.580 に答える