1

したがって、クリック後のチェックボックスの値に基づいて、日付ボックスを有効または無効にしたいと考えています。以下に示すように、サーバー側で実行できますが、クライアント側でこれを機能させる方法がわかりません。私の問題は、サーバーを呼び出さないとチェック ボックスの値にアクセスできないように見えることです。何か案は?

var chkPaid = app.createCheckBox("Paid in Full").setName("paidInFull").setId("paidInFull");
var dateBox2 = app.createDateBox().setName("paidThrough").setFormat(UiApp.DateTimeFormat.DATE_MEDIUM).setEnabled(false).setId("paidThru");
var paidThruDisable = app.createServerHandler("disableHandler");
paidThruDisable.addCallbackElement(chkPaid);
chkPaid.addValueChangeHandler(paidThruDisable);

function disableHandler(e){
  var app = UiApp.getActiveApplication();
  var widget = app.getElementById("paidThru");
  if(e.parameter.paidInFull !== "true"){
    widget.setEnabled(false);
  }else{
    widget.setEnabled(true);
  };
  return app;
}
4

1 に答える 1

1

これが私が書いたトリックを実行するコードの一部です;-)

ここでオンラインでテストできます

function doGet() {
  var app = UiApp.createApplication()
  var chkPaida = app.createCheckBox("Paid in Full").setValue(true);
  var chkPaidb = app.createCheckBox("Paid in Full").setVisible(false);
  var checkpanel = app.createHorizontalPanel().add(chkPaida).add(chkPaidb)
  var dateBox2 = app.createDateBox().setName("paidThrough").setFormat(UiApp.DateTimeFormat.DATE_MEDIUM).setId("paidThru").setName("paidThru");

  var Chandlera = app.createClientHandler().forTargets(dateBox2).setEnabled(false).forTargets(chkPaidb).setVisible(true).setValue(false)
  .forEventSource().setVisible(false)  
  chkPaida.addClickHandler(Chandlera)

  var Chandlerb = app.createClientHandler().forTargets(dateBox2).setEnabled(true).forTargets(chkPaida).setVisible(true).setValue(true)
  .forEventSource().setVisible(false)  
  chkPaidb.addClickHandler(Chandlerb)

app.add(checkpanel).add(dateBox2)
  return app
}
于 2012-10-23T19:06:58.730 に答える