2012-11-07 74 views
0

如果客戶機處理程序(位於同一窗口小部件上)滿足驗證條件,我們是否可以阻止服務器處理程序啓動? UI防止服務器處理程序被觸發

如果文本框爲空,我不想提交以執行任何服務器功能。

function doGet() { 
    var app = UiApp.createApplication(); 
    var flex = app.createFlexTable() 
    .setWidget(0, 0, app.createTextBox().setId('textbox')) 
    .setWidget(0, 1, app.createButton('Submit').setId('submit')) 
    .setWidget(0, 2, app.createLabel().setId('status')); 

    var clientHandler = app.createClientHandler().validateNotMatches(app.getElementById('textbox'), ' '); 

    var serverHandler = app.createServerHandler('submit').addCallbackElement(flex); 

    app.getElementById('submit').addClickHandler(clientHandler).addClickHandler(serverHandler); 

    app.add(flex); 
    return app; 

} 

function submit(e) { 
    var app = UiApp.getActiveApplication(); 
    app.getElementById('status').setText('Server handler fired'); 
    return app; 
} 

回答

2

你不需要或者想在這裏客戶端的處理程序,只需在服務器上處理一個驗證:如果你想有一個消息,說明了什麼問題

function doGet() { 
    var app = UiApp.createApplication(); 
    var flex = app.createFlexTable() 
    .setWidget(0, 0, app.createTextBox().setId('textbox')) 
    .setWidget(0, 1, app.createButton('Submit').setId('submit')) 
    .setWidget(0, 2, app.createLabel().setId('status')); 

    var serverHandler = app.createServerHandler('submit') 
    .validateLength(app.getElementById('textbox'), 1, null) 
    .addCallbackElement(flex); 

    app.getElementById('submit').addClickHandler(serverHandler); 

    app.add(flex); 
    return app; 

} 

function submit(e) { 
    var app = UiApp.getActiveApplication(); 
    app.getElementById('status').setText('Server handler fired'); 
    return app; 
} 

,你可以補充一點:

var clientHandler = app.createClientHandler() 
    .validateNotLength(app.getElementById('textbox'), 1, null) 
    .forTargets(app.getElementById('status')) 
    .setText('Cannot be empty'); 

app.getElementById('submit').addClickHandler(serverHandler) 
    .addClickHandler(clientHandler); 
+0

然後我怎麼能在狀態標籤上拋出一個setText()來表示「文本框不能爲空」? –

+0

啊,好的,我需要兩次驗證emtpy。謝謝。 –

相關問題