2013-03-05 60 views
4

我正在extjs4 MVC.I工作,我将卡在一个点,我将动态代理类型设置为'localstorage',在那里我将替换我的代理类型,它是在模型类中声明的'ajax'。 当我想要在客户端存储数据时,我正在将模型代理类型从ajax更改为locastorage.but但是当我调用特定模型对象的save()方法时,数据将在服务器端未保存在客户端。普莱舍给我一些建议如何在extjs4中动态设置代理类型?

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 

     }); 

,请给我一些建议.....

+0

您需要创建2个独立的代理,并使用@Aashray建议的'setProxy()'交换它们。如果他们共享配置,您可以创建一个基本代理并派生出2个专用代理。 – A1rPun 2013-03-05 10:56:07

+0

可以请你解释一下..... – 2013-03-05 11:09:14

回答

4

我创建了一个示例代码,以更好地理解切换代理。

//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 
+0

是啊!老板它的工作很好..但我在var lsproxy =新Ext.data.proxy.LocalStorage({ – 2013-03-06 06:12:04

+0

我得到错误undefined不是一个函数在本地存储初始化 – 2013-03-06 06:23:11

+0

尝试它与'Ext.create('分机。 data.proxy.LocalStorage',{' – A1rPun 2013-03-06 08:32:20

0

您可以使用Ext.data.Model上定义的方法setProxy()来设置代理。

+0

我也在设置代理---> modelObject.setProxy(proxy);但它不工作..请给更多的信息 – 2013-03-05 09:32:46

+0

你可以请张贴代码吗? – Aashray 2013-03-05 09:37:40

+0

我正在编辑我的代码在rememberMe()函数中请检查它.. – 2013-03-05 09:42:07