2012-03-01 55 views
0

点击新闻时,我想推送一个视图(卡片)。这是我的控制器。我没有使用导航视图。怎么做。Sencha touch 2 - 如何推送新列表项目的点击

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; 
              } 

          } 
          } 

我想我们不能在导航视图中放置两个或多个项目。你可以PLZ帮助

在此先感谢。 :)

+0

是否有任何其他的方式来推新组件未使用导航视图 – raghav 2012-03-01 14:29:47

+0

上述代码无法正常工作.. – raghav 2012-03-01 14:32:38

回答

2

对于具有card布局的容器,您可以使用setActiveItem。下面是一个简单的例子:

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配置中指定其添加动画:

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); 
    } 
}); 
+0

非常感谢。但我想写在控制器里面。我想采取一种观点的回应,并推动另一种观点。怎么做 。?? – raghav 2012-03-03 15:44:09

+0

case“NEWS”:{ this.getMain()。setActiveItem('blogview'); 休息; }此代码无效。什么是正确的方法? – raghav 2012-03-03 15:44:57

1

1)分配ID来您希望更改其视图的容器。

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

例如,如果你正在使用Navigation.View为你的容器,调用push方法加载所需的视图

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

请注意,您需要使用“Ext.ComponentManager.get”为“分机。得到'不适用于组件。

+0

嗨感谢您的回复。这有帮助。如果我不使用导航视图怎么办? 。 ext.ComponentManager.get( 'somePanel')添加(someXtype)。 – raghav 2012-03-06 06:37:21

0

这里是我有一个控制器的例子。尽管我删除了onListItemTap方法上的额外代码。

确保您的参考实际上正在工作。如果你的“的mainPanel”是导航视图,您可以在这样推新项目:

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); 
} 

}); 

为了您的mainPanel,这样的事情应该工作:

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

    config: { } 
});