0

私には 2 つの見方があります。User ビューには、いくつかのテキストとボタンがあります。そのボタンを使用して、2 番目のビューに切り替えたいと思います。しかし、これが sencha touch 2 でどのように機能するのかわかりません。「UserView」(最初のビュー) のボタンを押すと、次のエラーが表示されます。

キャッチされないエラー: SYNTAX_ERR: DOM 例外 12

これは基本的に私のコードが今どのように見えるかです:

app.js

Ext.Loader.setConfig({ enabled: true });

Ext.setup({
    viewport: {
        autoMaximize: false
    },
    onReady: function() {
        var app = new Ext.Application({
            name: 'AM',
            controllers: [
                'Main'
            ]
        });
    }
});

メインコントローラー

Ext.define('AM.controller.Main', {
    extend: 'Ext.app.Controller',
    views : ['User'],
    init: function() {
        this.getUserView().create();

        this.control ({
            '#new': {
               tap: function() {
                    alert('aaaa');
               }
            }
        });
    }
}); 

そして2つのビュー:

Ext.define('AM.view.User', {
    extend: 'Ext.Container',
    config: {
        fullscreen:true,
        items: [{
                xtype: 'button',
                text: 'New',
                id: 'new'
            }
        ],
        html: 'Testing<br />'
    }
}); 

2 番目のビュー

Ext.define('AM.view.New', {
    extend: 'Ext.Container',
    config: {
        fullscreen: true,
        html: 'w00t'
    }
});
4

1 に答える 1

8

これが、本来あるべき方法で作成されたアプリケーションです。私が行った変更に関するいくつかのメモを次に示します。

  • MVC アプリケーションを作成するときは、Ext.application代わりに呼び出す必要があります。Ext.setup
  • すべてのルート ビューは、app.js内で定義する必要があります。
  • this.control()コントローラーで使用する必要がなくなりました。構成ブロックで制御構成を使用するだけです。
  • viewsの構成ですべてのビューを定義する必要がありますExt.application
  • でビューを作成する代わりに、 で作成しinitますlaunch。これは、ビューに追加する必要があるコンポーネントです。

アプリ/ビュー/User.js

Ext.define('AM.view.User', {
    extend: 'Ext.Container',

    config: {
        items: [
            {
                xtype: 'button',
                text: 'New',
                id: 'new'
            }
        ],
        html: 'Testing<br />'
    }
});

アプリ/ビュー/New.js

Ext.define('AM.view.New', {
    extend: 'Ext.Container',
    config: {
        html: 'w00t'
    }
});

アプリ/コントローラー/Main.js

Ext.define('AM.controller.Main', {
    extend: 'Ext.app.Controller',

    config: {
        control: {
            '#new': {
                // On the tap event, call onNewTap
                tap: 'onNewTap'
            }
        }
    },

    launch: function() {
        // When our controller is launched, create an instance of our User view and add it to the viewport
        // which has a card layout
        Ext.Viewport.add(Ext.create('AM.view.User'));
    },

    onNewTap: function() {
        // When the user taps on the button, create a new reference of our New view, and set it as the active
        // item of Ext.Viewport
        Ext.Viewport.setActiveItem(Ext.create('AM.view.New'));
    }
});

app.js

Ext.application({
    name: 'AM',

    // Include the only controller
    controllers: ['Main'],

    // Include all views
    views: ['User', 'New'],

    // Give the Ext.Viewport global instance a custom layout and animation
    viewport: {
        layout: {
            type: 'card',
            animation: {
                type: 'slide',
                direction: 'left',
                duration: 300
            }
        }
    }
});

また、 Sencha Touch API Docsの優れたガイドをチェックアウトすることをお勧めします。Sencha フォーラムは非常にアクティブで優れた情報源であるため、チェックアウトすることもお勧めします。

于 2012-02-13T01:53:49.617 に答える