Как отправить атрибуты модели на сервер в extjs4?

Я работаю в структуре extjs4 MVC, и у меня возникла проблема в extjs4, все поля отправляются на сервер, но я хочу отправить на сервер только некоторые поля класса модели. Как я могу получить этот вывод?

1) Вот мой модельный класс

Ext.define('ab.model.sn.UserModel',{
    extend: 'Ext.data.Model',
    //idproperty:'userId',//fields property first position pk. 
    fields: ['userId','firstName','middleName','lastName','languageId','primaryEmail','birthDate','password','securityQuestionId','securityQuestionAnswer','isMale','creationTime','ipAddress','confirmationCode','userStatusId',],
    proxy:
    {
        type:'ajax',
            //type:'localstorage',
            //id:'users',
        api:
        {
            read:'http://localhost/balaee/Balaee/index.php/SocialNetworking/user/AuthenticateLogin',
            create:'http://localhost/balaee/Balaee/index.php/SocialNetworking/user/AuthenticateLogin122',
            update:'http://localhost/balaee/Balaee/index.php/SocialNetworking/user/AuthenticateLogin123'
        },//end of api
        reader:
        {
            type:'json',
        },//end of reader
        writer:
        {
            type:'json',
            root:'records',
        },//End of writer

    }//end of proxy
});

2) Вот мой код файла контроллера

var userObject = Ext.ModelManager.create(
        {
            firstName:record.get('firstName'),
            password:record.get('password'),

        },'ab.model.sn.UserModel');


userObject.save({    
    success: function(record, operation) 
    {
        console.log("registration successssssssssss  "+record.get('userId'));
    },//End of success function
    failure: function(record, operation) 
    {
        console.log("Inside failure functionnnnn");
    },//End of failure function
    callback: function(record, operation)
    {
        console.log("Inside callback functionnnnnn");   
    }//End of callback function
});// End of check save function

3) И данные будут идти в формате json

{"records":{"userId":"","firstName":"ram","middleName":"","lastName":"","languageId":"","primaryEmail":"","birthDate":"","password":"sham","securityQuestionId":"","securityQuestionAnswer":"","isMale":"","creationTime":"","ipAddress":"","confirmationCode":"","userStatusId":"","id":null}}

4) Но я хочу отправить только имя и пароль. Я не хочу отправлять все поля. как я могу отправить данные на сервер.

Я хочу json в этом формате

{"records":{"firstName":"ram","password":"sham"}}

пожалуйста, дайте мне несколько предложений....


person Pravin Mane    schedule 25.02.2013    source источник


Ответы (2)


Вам просто нужно перезаписать функцию getRecordData писателя. Нравится.

 writer:
            {
                type:'json',
                root:'records',
                getRecordData: function (record) { return {"firstName" :record.data.firstName,"password": record.data.password}; },
            },
person nscrob    schedule 25.02.2013

В ответе nscrob меньше кода, поэтому он может быть предпочтительнее, но есть также встроенный конфиг для этого на модели: persist: false. Это предотвращает отправку поля модели на сервер.

ИМХО, конфиги моделей, кажется, не используются так, как должны, даже в примерах сенчи (или, может быть, потому, что они не используются в примерах сенчи). Я думаю, что это также экономит незначительное количество ресурсов, если вы определяете типы данных в модели, а не позволяете клиенту работать с ними, например:

Ext.define('ab.model.sn.UserModel',{
    extend: 'Ext.data.Model',
    //idproperty:'userId',//fields property first position pk.

    // using field type definitions and explicit persistance
    fields: [
        {name: 'userId',                type: 'int',    persist: false},
        {name: 'firstName',             type: 'string'},
        {name: 'middleName',            type: 'string', persist: false},
        {name: 'lastName',              type: 'string', persist: false},
        {name: 'languageId',            type: 'int',    persist: false},
        {name: 'primaryEmail',          type: 'string', persist: false},
        {name: 'birthDate',             type: 'date',   dateFormat: 'c', persist: false},
        {name: 'password',              type: 'string'},
        {name: 'securityQuestionId',    type: 'int',    persist: false},
        {name: 'securityQuestionAnswer', type: 'string',persist: false},
        {name: 'isMale',                type: 'bool',   persist: false},
        {name: 'creationTime',          type: 'date',   dateFormat: 'c', persist: false},
        {name: 'ipAddress',             type: 'string', persist: false},
        {name: 'confirmationCode',      type: 'string', persist: false},
        {name: 'userStatusId',          type: 'int',    persist: false}
    ],
    proxy:
    {
        type:'ajax',
            //type:'localstorage',
            //id:'users',
        api:
        {
            read:'http://localhost/balaee/Balaee/index.php/SocialNetworking/user/AuthenticateLogin',
            create:'http://localhost/balaee/Balaee/index.php/SocialNetworking/user/AuthenticateLogin122',
            update:'http://localhost/balaee/Balaee/index.php/SocialNetworking/user/AuthenticateLogin123'
        },//end of api
        reader:
        {
            type:'json',
        },//end of reader
        writer:
        {
            type:'json',
            root:'records',
        },//End of writer

    }//end of proxy
});

Как я уже сказал, есть еще немного кода, но я решил добавить его в качестве встроенной обработки для этого сценария (вместо переопределения). Вы также можете удалить определения типов полей, если хотите, они не требуются для определения свойства persist.

person egerardus    schedule 25.02.2013