как вызвать динамически устанавливаемый тип прокси в extjs4?

Я работаю в extjs4 MVC. Я собираюсь застрять в точке, где я собираюсь установить динамический тип прокси на «localstorage», где я заменяю свой тип прокси, который является «ajax», который объявлен в классе модели. Когда я хочу хранить данные на стороне клиента, для этого я меняю тип прокси-сервера своей модели с ajax на locastorage. Но когда я вызываю метод save() для определенного объекта модели, данные передаются на сторону сервера, а не сохраняются на стороне клиента. дайте мне какое-нибудь предложение

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

Ext.define('Am.model.sn.UserModel',{
    extend: 'Ext.data.Model',
    fields: ['userId','firstName','middleName','lastName','languageId','primaryEmail','birthDate','password','securityQuestionId','securityQuestionAnswer','isMale','creationTime','ipAddress','confirmationCode','userStatusId',],
    proxy:
    {
        type:'ajax',
        api:
        {
            read:'index.php/SocialNetworking/user/AuthenticateLogin',
            create:'index.php/SocialNetworking/user/AuthenticateLogin',
        },//end of api
        reader:
        {
            type:'json',
        },//end of reader
        writer:
        {
            type:'json',
            root:'records',
        },//End of writer
    }//end of proxy
});

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

Ext.define('Am.controller.sn.UserController',
        {

            extend:'Ext.app.Controller',

            stores:['sn.UserStore','sn.SecurityquestionStore'],
            models:['sn.UserModel','sn.SecurityquestionModel'],
            views:['sn.user.Login','sn.user.Registration','sn.user.ForgetMyKey','sn.user.SecurityQuestion','sn.user.KpLogin'],
            -----
            ----
            init:function()
            {
                --------
            }
            remeberMe:function()
{
    console.log("check box selected");
    var email=this.getUserName().getValue();
    var password=this.getPassword().getValue();
    var objCheckBox=Ext.getCmp('checkbox');
    if(objCheckBox.getValue()==true)
    {
        window.localStorage.clear();
        //code for stoaring data at local storage
        var modelObject = Ext.ModelManager.create(
        {
            primaryEmail:email,
            password: password,
        }, 'Balaee.model.sn.UserModel');
        proxy=modelObject.getProxy();
        //proxy=modelObject.getProxy();
        proxy.type='localstorage';
        //proxy.set(type,'localstorage');
        proxy.id='rememberMe';
        //proxy.set(id,'rememberMe');
        //modelObject.setProxy(proxy);
        //console.log("models proxyyyyyyyyyy="+modelObject.getProxy().type+""+modelObject.getProxy().id);

        modelObject.setProxy(proxy);
        //
        I am also trying this but not work
        //Ext.apply(proxy,{type:'localstorage',id:'remember' });

        modelObject.save();
            // code to hide login window
            //var obj=Ext.ComponentQuery.query('#loginId');
            //console.log("Object name = "+obj[0].id);
            //obj[0].hide();
    }//end of if statement
    else
    {
        console.log("check box is not selected");
    }//end of else statement
},//End of rememberMe  function

        });

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


person Pravin Mane    schedule 05.03.2013    source источник
comment
Вам нужно создать 2 отдельных прокси и поменять их местами с помощью setProxy(), как предложил @Aashray. Если они имеют общие конфигурации, вы можете создать один базовый прокси и получить 2 специализированных прокси.   -  person A1rPun    schedule 05.03.2013
comment
не могли бы вы объяснить мне больше.....   -  person Pravin Mane    schedule 05.03.2013


Ответы (2)


Я создал пример кода для лучшего понимания переключения прокси.

//Defining model
Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [{name: 'name',  type: 'string'}]
});
//creation of ajax proxy
var ajaxProxy = new Ext.data.proxy.Ajax({
    id: 'ajaxp',
    reader: 'json'
});
//creation of local storage proxy
var lsProxy = new Ext.data.proxy.LocalStorage({
    id: 'localp',
    reader: 'json'
});
//Create instance of model
var user = Ext.create('User', {
    name : 'Pravin Mane',
    proxy: ajaxProxy //sets the ajax proxy
});

//Somewhere in your code
user.setProxy(lsProxy); //sets the localstorage proxy
person A1rPun    schedule 05.03.2013
comment
Да! Босс, он отлично работает. Но я получил ошибку в var lsproxy=new Ext.data.proxy.LocalStorage({ - person Pravin Mane; 06.03.2013
comment
я получил ошибку undefined не является функцией при инициализации локального хранилища - person Pravin Mane; 06.03.2013
comment
попробуй с Ext.create('Ext.data.proxy.LocalStorage',{ - person A1rPun; 06.03.2013
comment
это работает thnaks много ....! он также работает с var lsproxy=new Ext.data.proxy.LocalStorage({, просто по ошибке я бы не стал включать этот код:['Ext.data.proxy.LocalStorage'] . Большое спасибо... - person Pravin Mane; 06.03.2013

Вы можете установить прокси, используя метод setProxy(), определенный на странице Ext.data.Model.

person Aashray    schedule 05.03.2013
comment
Я также устанавливаю прокси---› modelObject.setProxy(proxy); но это не работает .. пожалуйста, дайте больше информации - person Pravin Mane; 05.03.2013