1

私は 3 つのタブを作成するメイン ビューを持っています。ログイン タブをクリックすると、ログインが成功した後にログイン フォームが開きます。ビューですが、同じタブパネルで開くのではなく、独立したビューとしてロードします。同じタブパネルで開く方法。

アプリケーションのメイン ビュー

Ext.define("SenchaTest.view.Main", {
    extend: 'Ext.tab.Panel',
    requires: [
        'Ext.TitleBar',


    ],
    config: {
        tabBarPosition: 'bottom',

        items: [
            {
                    title: 'Home',
                    iconCls: 'home',
                    html: [
                        '<img src="http://staging.sencha.com/img/sencha.png" />',
                        '<h1>Welcome to Sencha Touch</h1>',
                        "<p>This demonstrates how ",
                        "to use tabs, lists and forms to create a simple app</p>",
                        '<h2>Sencha Touch (2.0.0)</h2>'
                    ].join("")
                },



                {
                title: 'Log In',
                    iconCls: 'user',
                    xtype: 'formpanel',
                    url: 'contact.php',
                    layout: 'card',
            id:"loginForm",
                items: [
                    {
                        xtype: 'fieldset', 
            title: 'Log In',    
            id:"submitForm",                        
                        instructions: 'Enter username and password to login.',
                        defaults: {
                        required: true,
                        labelAlign: 'left',
                        labelWidth: '45%'
                    },
            items: [
                    {
                        xtype: 'textfield',
                        name : 'username',
                        label: 'User Name',
            allowBlank:false, 
                        useClearIcon: true              
                    }, {
                        xtype: 'passwordfield',
                        name : 'password',
                        label: 'Password',
            allowBlank:false, 
                        useClearIcon: false

                    },{
                            xtype: 'button',
                            text: 'Submit',
                            ui: 'confirm',
                        id: 'btnSubmitLogin'
                            //  this.up('formpanel').submit();
                            }]

                    }  

                ]
            }

        ]
    }
});

コントローラのコード

Ext.define("SenchaTest.controller.LoginForm", {
    extend : "Ext.app.Controller",
    config : {
        refs : {
            btnSubmitLogin : "#btnSubmitLogin",
            LoginForm : '#loginForm'
        },
        control : {
            btnSubmitLogin : {
                tap : "onSubmitLogin"
            }
        }
    },
    onSubmitLogin : function(btn) {
    alert("onSubmitLogin");
        console.log("onSubmitLogin");
        var values = this.getLoginForm().getValues();
        //alert(values.username);
        //alert(values.password);

         Ext.util.JSONP.request({ 

    url:'http://localhost:8092/returnjson.ashx',
                params:{                    callback:'callback',uname:values.username,password:values.password}, 
                callbackKey: 'callback', 
                success: function (result,request) 
                {     
                    if(result.status==true)
                    {
                     alert("Welcome " + result.UserName);

                                                          Ext.Viewport.setActiveItem(Ext.create('SenchaTest.view.Landing'));



                    }
                    else
                    {
                    alert("Username or Password is incorrect"); 
                    return;
                    }
                    console.log(result.UserName);

                    console.log(result);
                    alert(result); 

                    // Handle error logic 
                    if (result.error) { 
                        alert(response.error); 
                        return; 
                    } 
                } 
            }); 
    },
    launch : function() {
        this.callParent();
        console.log("LoginForm launch");
        Ext.Viewport.add(Ext.create('SenchaTest.view.Landing'));

    },
    init : function() {
        this.callParent();
        console.log("LoginForm init");
    }
});

ログイン ランディング後に読み込むビュー

Ext.define("SenchaTest.view.Landing", {
    extend: "Ext.Container",
    xtype: 'landingScreen',
    requires: [
        "SenchaTest.view.Main"       
    ],
    config: {
        html: "Welcome to my app"  
    }
});

利用した...

Ext.Viewport.setActiveItem(Ext.create('SenchaTest.view.Landing')); 

ランディング ビューをロードしますが、同じタブではなく、独立したページとしてロードされます。これについて助けてください。

4

1 に答える 1

0

次のコードは、同じパネル内の 2 つのビュー コンポーネントを動的に交換できる「置換」機能で Sencha Touch を拡張することを可能にします (それがあなたがやろうとしていることだと思います): http://www.sencha.com /forum/showthread.php?134909-Replace-component-function&langid=4

別の解決策 (推奨されません) は、3 番目の非表示のタブ パネル (「ランディング」) を作成し、ログインに成功したときにそれを作成して表示すると同時に、ログイン タブ パネルを非表示にすることです。

于 2012-11-18T22:16:37.740 に答える