Sencha touch 2 Sencha touch 2-如何在单击列表项时推送新视图

Sencha touch 2 Sencha touch 2-如何在单击列表项时推送新视图,sencha-touch-2,Sencha Touch 2,点击新闻,我想推一个视图(卡片)。这是我的控制器。我没有使用导航视图。如何操作 config:{ routes:{ 'News/index': 'showNews', }, refs : { main : 'mainpanel', }, control : { 'navigation': { select : 'showLanding'

点击新闻,我想推一个视图(卡片)。这是我的控制器。我没有使用导航视图。如何操作

config:{
    routes:{
        'News/index': 'showNews',
    },
    refs : {
        main : 'mainpanel',
    },

    control : {
        'navigation': {
                   select : 'showLanding'
                 }
           }
     },

    showNews : function(){
                 this.getMain().add({
                   xtype: 'blogview'
                    });
                },
    showLanding :   function(list,record) {
                           switch(record.data.navLink){

                               case "NEWS" : {
                                              this.getMain().setActiveItem('blogview');                                        
                                              break;
                                            }
                                case "PHOTOS" : {

                                               this.getMain().push({                                             
                                                 xtype:'photoview',
                                              });
                                              break;
                                            }

                            }
                          }
我认为我们不能在导航视图中提供两个或多个项目。你能帮忙吗

提前感谢。:)

您可以在具有布局的容器上使用。下面是一个简单的例子:

Ext.setup({
    onReady:function(){
        var container = Ext.create('Ext.Container', {
            layout: 'card',
            items: [
                {
                    items: [
                        {
                            xtype: 'button',
                            text: 'Tap this to add a new view',
                            handler: function() {
                                container.setActiveItem({
                                    html: 'This is the new item.'
                                });
                            }
                        }
                    ]
                }
            ]
        });

        Ext.Viewport.add(container);
    }
});
您可以通过在配置中指定动画来添加动画:

layout: {
    type: 'card',
    animation: {
        type: 'slide',
        direction: 'left',
        duration: 1000
    }
}
其完整性是:

Ext.setup({
    onReady:function(){
        var container = Ext.create('Ext.Container', {
            layout: {
                type: 'card',
                animation: {
                    type: 'slide',
                    direction: 'left',
                    duration: 1000
                }
            },
            items: [
                {
                    items: [
                        {
                            xtype: 'button',
                            text: 'Tap this to add a new view',
                            handler: function() {
                                container.setActiveItem({
                                    html: 'This is the new item.'
                                });
                            }
                        }
                    ]
                }
            ]
        });

        Ext.Viewport.add(container);
    }
});
可以在具有布局的容器上使用。下面是一个简单的例子:

Ext.setup({
    onReady:function(){
        var container = Ext.create('Ext.Container', {
            layout: 'card',
            items: [
                {
                    items: [
                        {
                            xtype: 'button',
                            text: 'Tap this to add a new view',
                            handler: function() {
                                container.setActiveItem({
                                    html: 'This is the new item.'
                                });
                            }
                        }
                    ]
                }
            ]
        });

        Ext.Viewport.add(container);
    }
});
您可以通过在配置中指定动画来添加动画:

layout: {
    type: 'card',
    animation: {
        type: 'slide',
        direction: 'left',
        duration: 1000
    }
}
其完整性是:

Ext.setup({
    onReady:function(){
        var container = Ext.create('Ext.Container', {
            layout: {
                type: 'card',
                animation: {
                    type: 'slide',
                    direction: 'left',
                    duration: 1000
                }
            },
            items: [
                {
                    items: [
                        {
                            xtype: 'button',
                            text: 'Tap this to add a new view',
                            handler: function() {
                                container.setActiveItem({
                                    html: 'This is the new item.'
                                });
                            }
                        }
                    ]
                }
            ]
        });

        Ext.Viewport.add(container);
    }
});
1) 为要更改其视图的容器指定ID

2) 在控制器中,通过ID获取对容器的引用,并调用适当的方法来加载视图

例如,如果您使用Navigation.View作为容器,则调用push方法来加载所需的视图

Ext.ComponentManager.get('mynavigationview').push({
      title: 'Second',
      html: 'Second view!'
      });
请注意,您需要使用“Ext.ComponentManager.get”作为“Ext.get”不适用于组件。

1)为要更改其视图的容器分配ID

2) 在控制器中,通过ID获取对容器的引用,并调用适当的方法来加载视图

例如,如果您使用Navigation.View作为容器,则调用push方法来加载所需的视图

Ext.ComponentManager.get('mynavigationview').push({
      title: 'Second',
      html: 'Second view!'
      });

请注意,您需要使用“Ext.ComponentManager.get”作为“Ext.get”不适用于组件。

以下是我使用的控制器的示例。不过,我删除了onListItemTap方法上的额外代码

确保你的推荐信确实有效。如果“主面板”是导航视图,则可以按如下方式推入新项目:

Ext.define('MyApp.controller.MyController', {
extend: 'Ext.app.Controller',

config: {
    refs: {
        mainPanel: 'main'
    },

    control: {
        "list": {
            itemtap: 'onListItemTap'
        }
    }
},

onListItemTap: function (dataview, index, target, record, e, options) {
    var myView = Ext.create('Ext.Container', {
    ...
    ...
    });

    this.getMainPanel().push(myView);
}

});
对于主面板,类似这样的功能应该可以工作:

Ext.define('MyApp.view.Main', {
    extend: 'Ext.navigation.View',
    xtype: 'main',

    config: { }
});

下面是我拥有的一个控制器的示例。不过,我删除了onListItemTap方法上的额外代码

确保你的推荐信确实有效。如果“主面板”是导航视图,则可以按如下方式推入新项目:

Ext.define('MyApp.controller.MyController', {
extend: 'Ext.app.Controller',

config: {
    refs: {
        mainPanel: 'main'
    },

    control: {
        "list": {
            itemtap: 'onListItemTap'
        }
    }
},

onListItemTap: function (dataview, index, target, record, e, options) {
    var myView = Ext.create('Ext.Container', {
    ...
    ...
    });

    this.getMainPanel().push(myView);
}

});
对于主面板,类似这样的功能应该可以工作:

Ext.define('MyApp.view.Main', {
    extend: 'Ext.navigation.View',
    xtype: 'main',

    config: { }
});

有没有其他方法可以在不使用导航视图的情况下推送新组件上面的代码不起作用..有没有其他方法可以在不使用导航视图的情况下推送新组件上面的代码不起作用..非常感谢。但是我想把它写在控制器里面。我想对一个视图进行e引用,然后在其中推另一个视图。如何做到这一点。?case“NEWS”:{this.getMain().setActiveItem('blogview');break;}此代码不起作用。正确的方法是什么?非常感谢。但是我想把它写在控制器里面。我想对一个视图进行e引用,然后在其中推另一个视图。如何做到这一点。?case“NEWS”:{this.getMain().setActiveItem('blogview');break;}此代码不起作用。正确的方法是什么?谢谢你的回复。这很有帮助。如果我没有使用导航视图怎么办。ext.ComponentManager.get('somePanel').add(someXtype);谢谢你的回复。这很有帮助。如果我没有使用导航视图怎么办。ext.ComponentManager.get('somePanel').add(someXtype);