2013-01-24 27 views
0

我需要將添加參數傳遞給澤西服務器。但是,如何提交我的網址一樣..get/{參數1}/{參數2}/{參數}Sencha touch自定義休息代理網址

,這裏是我的JS文件

Ext.define('bluebutton.view.BlueButton.testing', { 
    extend: 'Ext.form.Panel', 
    xtype: 'testing', 
     requires: [ 

    'bluebutton.view.BlueButton.TransactionList', 
    'bluebutton.view.BlueButton.MemberPopUp', 
    'bluebutton.view.BlueButton.MemberDetail', 
    'bluebutton.store.BlueButton.MemberList', 

    ], 
    config: { 
    id:'register', 
     items :[ 

       { 
        xtype: 'textfield', 
        name: 'name', 
        label: 'Name' 
       }, 
       { 
        xtype: 'emailfield', 
        name: 'email', 
        label: 'Email' 
       }, 

       { 
        xtype: 'button', 
        text: 'Send', 
        handler: function(button) { 
         var form = Ext.getCmp('register'); 
          values = form.getValues(); 






//  Select record 
     //If load data , restful will using "get", url will be /users/1 
     var User = Ext.ModelMgr.getModel('bluebutton.model.BlueButton.MemberList'); 
     User.load(123, 
     { 
      success: function(user) { 
      alert(user.get('fullName')); 




      } 
     } 
     ); 



        } 
       } 


     ], 


    } 

}); 

Model.js

Ext.define('bluebutton.model.BlueButton.MemberList', { 
    extend: 'Ext.data.Model', 
    config: { 
     idProperty: 'memberModel', 
     fields: [ 
      { name: 'fullName' }, 
      { name: 'singer' }, 

     ], 

     proxy: { 
      type: 'rest', 
      url: 'http://localhost:8080/RESTFulExample/rest/json/metallica/get', 
      reader: 'json', 
      actionMethods: { 
       create: 'GET', 
       read: 'POST', 
       update: 'PUT', 
       destroy: 'DELETE' 
      }, 



      reader: { 
       type: 'json', 

      }, 

      writer: { 
       type: 'json', 

      }, 
     } 

    } 

}); 

但現在我只能通過我的網址,如..get/123請引導我一些解決方案。謝謝

回答

2

2件事來到我的mi nd,首先不要在模型定義中寫代理,而應該在store的初始化函數中設置它,在這裏你可以查看配置數據並在其基礎上創建url。例如

initialize: function() { 
     var myId = this.config.uid; 
     this.setProxy({ 
     type: 'rest', 
     url: 'http://localhost:8080/RESTFulExample/rest/json/metallica/get/'+myId, 
     reader: 'json', 
     actionMethods: { 
      create: 'GET', 
      read: 'POST', 
      update: 'PUT', 
      destroy: 'DELETE' 
     }, 
     reader: { 
      type: 'json', 

     }, 
     writer: { 
      type: 'json', 

     }, 
    }); 
} 

,你可以通過ID來加載,當您創建存儲這樣的:

var memberStore = Ext.create('bluebutton.store.BlueButton.MemberList', { 
     uid : 123 
    }); 

第二個辦法可以編寫自己的代理擴展Ext.data.proxy.Rest和實施buildUrl,使得它會檢查數據和附加它到網址。例如

buildUrl: function(request) { 
    var me  = this, 
     url  = me.callParent(arguments); 
    if(!Ext.isEmpty(someData)){ 
     url = Ext.urlAppend(url, "data="+someData); 
    } 
    return url; 
} 

我希望它有幫助。對於自定義代理,我在過去使用

編輯 示例代碼一些令牌追加到每一個請求

Ext.define('myapp.proxy.CustomJsonpProxy', { 
    extend: 'Ext.data.proxy.JsonP', 
    alias: 'proxy.customjsonpproxy', 
    buildUrl: function(request) { 
    var me  = this, 
    url  = me.callParent(arguments); 
    if(!Ext.isEmpty(loggedInUserToken)){ 
     url = Ext.urlAppend(url, "token="+loggedInUserToken); 
    } 
    return url; 
    } 
}); 
+0

嗨,謝謝你的回覆。我是sencha touch的新手。第二種方式。我如何重寫Ext.data.proxy.Rest?可以給我更多的例子嗎? – user998405

+0

另外。對於第一種方式,我應該添加「store.sync」之類的東西,然後纔會將高峯網址添加到澤西服務器,儀式中?對不起,我的小白問題 – user998405

+0

檢查我編輯的答案自定義代理的示例代碼。 關於第一種方法,您可以隨時調用加載函數,而不是同步,前提是您已在商店中設置了「autoLoad:false」。 – ThinkFloyd

0

下面的代碼工作對我來說....到的參數組到一個URL

myStore.getProxy().getApi().read = myStore.getProxy().getApi().read + param;