2011-02-28 2 views
0

Я использую Ext.direct.RemotingProvider. На стороне сервера я делаю некоторые проверки проверки. Ответ отправляется обратно в формате JSON.Ext.Direct Form Integration

Если я обнаружил ошибки при выполнении проверок проверки, поле success = false, а ошибки будут содержать ошибку.

Я пытаюсь выяснить, как отразить ошибки, которые я обнаружил на стороне сервера в форме (на стороне клиента).

В приведенной ниже ссылке приведен пример того, чего я хочу достичь. Когда клиент нажимает «отправить», в форме появляется сообщение об ошибке, как оно работает?

Example

В коде я пост в нижней части происходит следующее: в браузере есть 2 поля (Имя, E-mail) и 2 кнопки. Поля на данный момент неактуальны. они используются как соски.

Каждый раз, когда пользователь нажимает кнопку «Добавить», новое действие добавляется в callBuffer из Ext.direct.RemotingProvider Когда пользователь нажимает кнопку «Применить», все действия отправляются на маршрутизатор (MVC модель), а оттуда - к определенному контроллеру. (функция sfw.Direct.getProvider ('sfwProvider'). triggerAndSend() запускается).

На данный момент я намеренно не отвечаю на запросы и создаю поле ошибки, точно так же, как ссылка на ссылку, добавленная в начале Потока. Я положил в поле ошибок {email = "Уже существует"}. , но я не вижу эффекта в форме.

что я делаю неправильно?

Код:

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

В ответ JSON вам нужно следующую структуру

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

Где "name of field" является вариант name конфигурации в своей области, и "validation message" это сообщение, которое вы хотите отобразить на Пользователь.

Когда вы отправляете ответ вроде этого, ExtJS позаботится обо всем остальном.

EDIT: Вы можете также необходимо включить QuickTips:

Ext.QuickTips.init();

Добавить эту строку, прежде чем объявить форму

EDIT 2: Кроме того, убедитесь, что вы используете метод submit() найден на BasicForm:

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

привет Jaitsu, то есть то, что я не возвращаюсь с сервера, но не влияет на форму -> { «тип»: «rpc», «status»: true, «tid»: 5, «result»: {«success»: false, «errors»: {«email»: «уже принят»}}} – batz

+0

Я отредактировал свой ответ , вам просто нужно включить быстрые подсказки – JamesHalsall

+0

Привет, я добавил Ext.QuickTips.init(); в начале (до создания formPanel), но все еще не работает ... больше идей о том, что я могу пропустить? – batz