ユーザーデータを収集するために UiApp でフォームを作成しています。ページ上の回答に基づいて、ページベースの回答に移動する必要があります。3 つのページがあるとします。ユーザーが最初のページを完了します。ボタンとサーバー ハンドラを使用して、実行する関数を呼び出します。if ステートメントは次のようになります。
if(value1 == s1 && value2 == s2){
app.getElementById('page1').setVisible(false);
app.getElementById('page2').setVisible(true);
}
これはうまくいきます。2ページ目です。そこから次のボタンをクリックすると、次のメソッドでユーザー データをロードする syncText ' 関数が呼び出されます。
すべて良い。問題が発生するのは、1 ページ目にいて、3 ページ目と syncText に移動する必要がある場合です。
if( value1 != s1){
app.getElementById('page1').setVisible(false);
app.getElementById('page3').setVisible(true);
syncText()
}
これは動作しません。Google の UiApp の If ステートメントで関数を呼び出すにはどうすればよいですか?
関数を if ステートメントに単純に書き直すことができることはわかっていますが、実際のフォームははるかに複雑であり、同じことを繰り返すのは避けたいと考えています。ヘルプはありますか?
更新:関数が呼び出されているように見えますが、フォームから値を見つけることができません。この関数にフォームの値を取得するにはどうすればよいですか?
完全なコード例は次のとおりです。
function doGet(e){
var app = UiApp.createApplication();
var appPanel = app.createVerticalPanel();
var form = app.createFormPanel();
var panel1 = app.createGrid(4,5).setId('panel1');
var firstNameLabel = app.createLabel("First Name:");
var firstName = app.createTextBox().setName('firstName').setId('firstName');
var lastNameLabel = app.createLabel("Last Name:");
var lastName = app.createTextBox().setName('lastName').setId('lastName');
var emailLabel = app.createLabel('Your Email');
var email = app.createTextBox().setName('email').setId('email');
var testing = app.createServerHandler('testing').addCallbackElement(form);
var button1 = app.createButton('Go to Review');
var info1 = app.createLabel("Please Enter First Name")
.setVisible(false)
.setStyleAttribute('color', 'red');
var info2 = app.createLabel("Please Enter Last Name")
.setVisible(false)
.setStyleAttribute('color', 'red');
var info3 = app.createLabel("Please Enter Email")
.setVisible(false)
.setStyleAttribute('color', 'red');
panel1.setWidget(0,0, firstNameLabel);
panel1.setWidget(0,1, firstName);
panel1.setWidget(0,2, lastNameLabel);
panel1.setWidget(0,3, lastName);
panel1.setWidget(1,1, info1);
panel1.setWidget(1,3, info2);
panel1.setWidget(2,0, emailLabel);
panel1.setWidget(2,1, email);
panel1.setWidget(2,3, button1);
panel1.setWidget(3,1, info3);
app.add(form);
appPanel.add(panel1);
form.add(appPanel);
var panel2 = app.createGrid(4,5).setId('panel2').setVisible(false);
var reviewFirstNameLabel = app.createLabel("First Name:");
var reviewFirstName = app.createLabel().setId('reviewFirstName');
var reviewLastNameLabel = app.createLabel("Last Name:");
var reviewLastName = app.createLabel().setId('reviewLastName');
var reviewEmailLabel = app.createLabel('Your Email:');
var reviewEmail = app.createLabel().setId('reviewEmail');
var submitButton = app.createSubmitButton('Submit');
var button2 = app.createButton('Edit Response');
panel2.setWidget(0,0, reviewFirstNameLabel);
panel2.setWidget(0,1, reviewFirstName);
panel2.setWidget(0,2, reviewLastNameLabel);
panel2.setWidget(0,3, reviewLastName);
panel2.setWidget(1,0, reviewEmailLabel);
panel2.setWidget(1,1, reviewEmail);
panel2.setWidget(2,0, button2);
panel2.setWidget(3,0, submitButton);
appPanel.add(panel2);
//
var editResponse = app.createClientHandler()
.forTargets(panel1).setVisible(true)
.forTargets(panel2).setVisible(false);
button1.addClickHandler(testing);
button2.addClickHandler(editResponse);
return app;
}
function syncText(e){
var app = UiApp.getActiveApplication();
app.getElementById('reviewFirstName').setText(e.parameter.firstName));
app.getElementById('reviewLastName').setText(e.parameter.lastName);
app.getElementById('reviewEmail').setText(e.parameter.email);
app.getElementById('panel1').setVisible(false);
app.getElementById('panel2').setVisible(true);
return app;
}
function testing(e){
var app = UiApp.getActiveApplication();
var firstName = e.parameter.firstName;
var lastName = e.parameter.lastName;
var email = e.parameter.email;
if(firstName != ""){
syncText();
}
パラメータが定義されていないというエラーが表示されるようになりましたか? テスト関数のすべての値がチェックアウトされますが、syncText() から値を取得できないようです。これを機能させるための助けはありますか?