Ext.Direct Форма Интеграция - PullRequest
       0

Ext.Direct Форма Интеграция

0 голосов
/ 28 февраля 2011

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

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

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

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

Пример

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

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

На данный момент я намеренно провалю ответ и создаю поле ошибки, так же, как пример ссылки, которую я добавил в начале Темы. Я положил в поле ошибок {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);
    }

    });

1 Ответ

0 голосов
/ 28 февраля 2011

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

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

Где "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
                }
            });
        }
    }],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...