2011-02-28 22 views
0

我正在使用Ext.direct.RemotingProvider。在服務器端,我做了一些驗證檢查。響應以JSON格式發回。Ext.Direct Form Integration

如果在進行驗證檢查時發現任何錯誤,字段success = false,並且錯誤將包含錯誤。

我想弄明白,我如何反映我發現在窗體(客戶端)的服務器端的錯誤。

在下面的鏈接中有一個我想要實現的例子。當客戶按下「提交」時會在表單中出現錯誤信息,它是如何工作的?

Example

在我張貼在發生以下情況下的代碼: 在瀏覽器中有2個字段(姓名,電子郵件)和2層的按鈕。 這些字段與現在無關。他們被用作假人。

每當用戶按下「添加」按鈕,一個新的動作被添加到callBuffer的Ext.direct.RemotingProvider當用戶按下「應用」按鈕時,所有的動作都被髮送到路由器(MVC模型)並從那裏到一個特定的控制器。 (函數sfw.Direct.getProvider('sfwProvider')。combineAndSend()被觸發)。

至於現在,我故意失敗的響應和創建一個錯誤字段,就像我在線程的開始添加的示例鏈接。 我把錯誤字段{email =「Already exists」}。 但我看不到形式中的效果..

我做錯了什麼?

代碼:

appWiki.main_panel = new Ext.FormPanel({ 
     renderTo: 'extjs_panels_container' 
     , id: 'appWiki_main_panel' 
     , name: 'appWiki_main_panel' 
     , defaultType: 'textfield' 

     , items: [ 
      { 
      fieldLabel: 'Name', 
      name: 'name' 
      } 
      ,{ 
      fieldLabel: 'Email', 
      msgTarget: 'side', 
      name: 'email' 
     }] 

     ,buttons:[ 
     {xtype: 'sfw.Button' 
     , text: 'Add' 
     , handler: function(){sfw.rule.store.api.readByRowId({data: {_ROWID_: 1}});} 
     } 
     ,{text: 'Submit' 
     , handler: function(){ 
      appWiki.main_panel.getForm().submit({ 
      }); 
     }  
     }] 

    ,api: { 
     // The server-side must mark the submit handler as a 'formHandler' 
     submit: sumbitAllRequests 
    } 
    , load: function() 
    { 

     setTimeout("hide_loading_mask()",2000); 
    } 

    }); 

回答

0

在您需要以下結構

{ "result" : { "success": false, "errors": { "name of field" : "validation message" } } 

的JSON響應,其中"name of field"是在你的領域的name配置選項,"validation message"是要顯示的消息用戶。

當你發送這樣的回覆時,ExtJS會處理剩下的事情。

編輯:您可能還需要啓用QuickTips:

Ext.QuickTips.init();

添加該行聲明表單之前

編輯2:此外,請確保您使用中發現的submit()方法在BasicForm

buttons:[{ 
     text: 'Submit', 
     handler: function(){ 
      basicInfo.getForm().submit({ 
       params: { 
        foo: 'bar', 
        uid: 34 
       } 
      }); 
     } 
    }], 
+0

嗨Jaitsu,這是我從服務器返回,但沒有影響窗體 - > {「type」: 「rpc」,「status」:true,「tid」:5,「result」:{「success」:false,「errors」:{「email」:「already taken」}}} – batz 2011-02-28 16:23:11

+0

我編輯了我的答案,你可能只需要啓用快速提示 – JamesHalsall 2011-02-28 19:47:16

+0

嗨,我添加了Ext.QuickTips.init(); (在創建formPanel之前),但仍然無法正常工作......對於我可能會丟失什麼的更多想法? – batz 2011-03-01 09:34:16