Sencha touch自定义休息代理网址

时间:2013-01-24 09:07:44

标签: url rest parameters sencha-touch-2

我需要将额外的参数传递给球衣服务器。但是如何提交我的网址,例如 .. get / {param1} / {param2} / {param3}

这是我的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 个答案:

答案 0 :(得分:2)

我想到了两件事,首先不要在模型定义中编写代理,而是将其设置在store的初始化函数中,您可以在其中查看配置数据并在其基础上创建URL。 e.g。

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,以便检查数据并将其附加到网址。 e.g。

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;
  }
});

答案 1 :(得分:0)

以下代码对我有用....将一个参数设置为一个URL

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