Sencha Touch 2和Ext.Direct API调用 - 登录表单

时间:2014-08-12 20:52:33

标签: extjs sencha-touch-2

所以主要问题是:有没有人知道我需要如何更改我的调用方法以与Sencha Touch 2兼容?

描述: 我有一个带有C#后端的大型Extjs应用程序。我已经有一个包含页面的移动网站,但它们都不需要提交的表单数据。尝试创建登录页面时遇到了麻烦。

在桌面上,使用extjs和Ext.direct,有登录表单,它们工作正常,但相同的编码模式似乎与Sencha Touch 2无关。

Ext.define('PF.view.phone.login.Form', {
extend: 'Ext.form.Panel',
alias: 'widget.phoneloginform',
requires: ['Ext.form.FieldSet', 'Ext.form.Password', 'Ext.Label', 'Ext.Img'],
autoheight: true,
initialize: function () {
    this.build();
    this.callParent();
    Ext.apply(this, {
        api: {
            submit: LoginActionImpl.login
        }
    });
    scope: this
},
config: {
    title: 'Login',
    items: [
        {
            xtype: 'label',
            html: 'Client Login',
            itemId: 'clientLoginLabel',
            style: 'text-align: left; font-size: 1.1em',
            margin: '10 0 20 0'
        }, {
            xtype: 'fieldset',
            /*Temporary style*/
            margin: '10 17% 10 17% ',
            items: [
                {
                    xtype: 'textfield',
                    itemId: 'loginUsername',
                    name: 'loginUsername',
                    label: 'Username',
                    required: true
                }, {
                    xtype: 'passwordfield',
                    itemId: 'loginPassword',
                    name: 'loginPassword',
                    label: 'Password',
                    required: true
                }, {
                    xtype: 'toolbar',
                    layout: {
                        pack: 'right'
                    },
                    ui: 'plain',
                    items: [{
                        xtype: 'button',
                        itemId: 'loginButton',
                        text: 'Login',
                        ui: 'confirm'
                    }, {
                        xtype: 'button',
                        itemId: 'clearButton',
                        text: 'Clear',
                        ui: 'decline'
                    }]
                }
            ]
        }
   ]
},
build: function () {
    this.down('#clearButton').setHandler(this.clear);
    this.down('#loginButton').setHandler(this.login);
},
clear: function (btn, evt) {
    btn.up('phoneloginform').reset();

},
login: function (btn, evt) {
    /* Need help here */
    /* Below is what would normally be used in the rest of the application */
    this.submit({
        success: this.onLoginSuccess,
        failure: function (form, action) {
            this.onLoginFailure(action.result);
        },
        scope: this
    });
},
onLoginSuccess: function (arguments) {

    Ext.dispatch('login/success');
},
onLoginFailure: function (result) {

    // Here we need to check the actual results to determine why the login failed.
    //
    // A return code of -2 indicates account locked - otherwise we just assume an invalid attempt.
    //
    if (result.returnCode == -2) {
        this.getComponent("loginUsername").markInvalid(t('ptl_mbl_user_status_locked_password'));
        this.getComponent("loginUsername").markInvalid(t('ptl_mbl_user_status_locked_password'));
    }
    else {
        this.getComponent("loginUsername").markInvalid(t('wms_username_password_incorrect_error'));
        this.getComponent("loginPassword").markInvalid(t('wms_username_password_incorrect_error'));
    }
    Ext.dispatch('login/fail', result.returnCode);
},

getUsername: function () {
    if (this.username) {
        this.username = this.getValues()['#loginUsername'];
    }
},

getPassword: function () {
    if (this.password) {
        this.password = this.getValues()['#loginPassword'];
    }
}
});

C#方法的方法是:

    [DirectMethodForm]
    public JObject login(HttpRequest request)
    {
        String username = request["loginUsername"];
        String password = request["loginPassword"];
        this.setDB(request["db"]);

        int loginReturnCode = this.getUserDetailsService().login(username, password, this.getDB(), true);

        JObject jsonObject;
        if (loginReturnCode == 0)
        {
            jsonObject = new JObject(
                new JProperty("loginUsername", username),
                new JProperty("loginPassword", password),
                new JProperty("db", this.getDB()),
                new JProperty("success", true));
        }
        else
        {
            jsonObject = new JObject(
                new JProperty("errors", new JArray(new[] { loginReturnCode.ToString() })),
                new JProperty("returnCode", loginReturnCode),
                new JProperty("failed", true));
        }

        return jsonObject;
    }

以及我尝试重复使用的内容,以便无法更改。

逐步浏览浏览器中的代码,问题出现在" urlAppend" " sencha-touch-all.js"中的方法文件所在的" url"参数为null,因此调用永远不会到达C#代码。

    urlAppend : function(url, string) {
    if (!Ext.isEmpty(string)) {
        return url + (url.indexOf('?') === -1 ? '?' : '&') + string;
    }

    return url;
},

但是,在使用Ext.direct之前,我从未需要设置该变量。我没有单独的Web服务,因此无法进行实际的Web服务调用。

提前致谢。

0 个答案:

没有答案