Sencha touch 2 使用按钮切换视图

Sencha touch 2 使用按钮切换视图,sencha-touch-2,Sencha Touch 2,我有两种看法。用户视图有一些文本和一个按钮。我想用那个按钮切换到第二个视图。但我不知道sencha touch 2是如何运作的。当我按下“UserView”(这是第一个视图)上的按钮时,会出现以下错误: 未捕获错误:语法错误:DOM异常12 这就是我的代码现在的基本外观: app.js Ext.Loader.setConfig({ enabled: true }); Ext.setup({ viewport: { autoMaximize: false },

我有两种看法。用户视图有一些文本和一个按钮。我想用那个按钮切换到第二个视图。但我不知道sencha touch 2是如何运作的。当我按下“UserView”(这是第一个视图)上的按钮时,会出现以下错误:

未捕获错误:语法错误: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.view.User', {
    extend: 'Ext.Container',

    config: {
        items: [
            {
                xtype: 'button',
                text: 'New',
                id: 'new'
            }
        ],
        html: 'Testing<br />'
    }
});
Ext.define('AM.view.New', {
    extend: 'Ext.Container',
    config: {
        html: 'w00t'
    }
});
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'));
    }
});
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
            }
        }
    }
});
主控制器

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

        this.control ({
            '#new': {
               tap: function() {
                    alert('aaaa');
               }
            }
        });
    }
}); 
和两个视图:

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

这是您的应用程序的编写方式。以下是关于我所做更改的一些注释:

  • 创建MVC应用程序时,应调用
    Ext.application
    ,而不是
    Ext.setup
  • 所有根视图都应该在app.js中定义
  • 您不再需要在控制器中使用
    this.control()
    。您可以简单地使用配置块中的控件配置
  • 您应该在
    Ext.application
    视图
    配置中定义所有视图
  • 不要在
    init
    中创建视图,而是在
    launch
    中创建视图。这是应该添加到视图中的组件
app/view/User.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.view.User', {
    extend: 'Ext.Container',

    config: {
        items: [
            {
                xtype: 'button',
                text: 'New',
                id: 'new'
            }
        ],
        html: 'Testing<br />'
    }
});
Ext.define('AM.view.New', {
    extend: 'Ext.Container',
    config: {
        html: 'w00t'
    }
});
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'));
    }
});
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
            }
        }
    }
});
app/controller/Main.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.view.User', {
    extend: 'Ext.Container',

    config: {
        items: [
            {
                xtype: 'button',
                text: 'New',
                id: 'new'
            }
        ],
        html: 'Testing<br />'
    }
});
Ext.define('AM.view.New', {
    extend: 'Ext.Container',
    config: {
        html: 'w00t'
    }
});
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'));
    }
});
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
            }
        }
    }
});
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.view.User', {
    extend: 'Ext.Container',

    config: {
        items: [
            {
                xtype: 'button',
                text: 'New',
                id: 'new'
            }
        ],
        html: 'Testing<br />'
    }
});
Ext.define('AM.view.New', {
    extend: 'Ext.Container',
    config: {
        html: 'w00t'
    }
});
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'));
    }
});
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
            }
        }
    }
});
我还建议您在上查看伟大的指南,以及查看,因为它们非常活跃,是一个很好的信息来源