2013-03-05 21 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