2

私はクラスを定義していますが、以下のコードでそれ自体を参照しようとすると非常に問題があります。プッシュアクションとポップアクションを訴えようとしていることがわかりますが、たとえばthis.self.pop()はクラスを参照する正しい方法ではありません。クラス定義でこれを参照する正しい方法は何ですか?

//create the navigation view and add it into the Ext.Viewport
Ext.define('myApp.view.Settings', {
    extend: 'Ext.navigation.View',
    id:'view',
    xtype: 'navigationview',
    config: {
        title: 'Settings',
        iconCls: 'settings',
        //we only give it one item by default, which will be the only item in the 'stack' when it loads
        items: [
            {
                //items can have titles
                title: 'Navigation View',
                padding: 10,

                //inside this first item we are going to add a button
                items: [
                    {
                        xtype: 'button',
                        text: 'Push another view!',
                        handler: function () {
                            //when someone taps this button, it will push another view into stack
                            this.self.push({
                                //this one also has a title
                                title: 'Second View',
                                padding: 10,

                                //once again, this view has one button
                                items: [
                                    {
                                        xtype: 'button',
                                        text: 'Pop this view!',
                                        handler: function () {
                                            //and when you press this button, it will pop the current view (this) out of the stack
                                            this.self.pop();
                                        }
                                    }
                                ]
                            });
                        }
                    }
                ]
            }
        ]
    }
});
4

2 に答える 2

3

で使用thisする場合handlerthisビューではなくボタンを参照します。コンポーネントを取得しExt.navigation.View、pushメソッドとpopメソッドを利用する場合は、Ext.getCmp(id)を使用します。

Ext.getCmp('NavView').push(newView); // Instead of this.self.push()
Ext.getCmp('NavView').pop();         // Instead of this.self.pop();

ボタンハンドラーは次のようになります

handler: function() {
    var self = Ext.getCmp('NavView');
    var button = Ext.create('Ext.Button', {
        text: 'Pop View',
        id: 'button2',
        handler: function() {
            self.pop();
        }
    });
    var newView = {
        title: 'New View',
        id: 'NewView',
        items: [button]
    };
    self.push(newView);
}

この実例を確認してください。

于 2013-01-29T17:39:01.063 に答える
3

upこのメソッドを使用して、親コンテナを検索することもできます。

this.up('navigationview').push(...);

詳細はこちら: http: //docs.sencha.com/touch/2-1/# !/ api/Ext.Button-method-up 。

于 2013-01-31T21:37:17.447 に答える