2013-07-31 32 views
2

在我的应用程序中,我有一个项目视图,一个主视图,它是一个从Ext.container.Container扩展的简单类。ExtJS 4.2.1 - 无法从控制器获取视图实例

我也有一个主控制器,我试图获取视图实例,所以动态的我可以推动相应的项目,如果用户登录或不。

我试过使用视图:['MainView'],参考[{selector:'thextype'}]等没有运气。

我在sencha touch中使用引用(ref)来做这种事情,你能帮我用Extjs v4.2吗?

只是为了澄清,我没有试图获得DOM元素,我试图获取视图实例与关联的方法。

由于提前,

回答

1

经过一段时间的调试,似乎问题在于它被称为函数的上下文。

我在init方法就像一条线说:

var openCrmDashboardFn = Ext.Function.bind(this.onOpenCrmDashboard, this); 

和它的工作。

谢谢!

4

定义您的视图的xtype:

xtype: 'mainview' 

,然后在你的控制器:

requires: ['...'] // your view class 
// ... 
refs: [{ 
    ref: 'mainView', 
    selector: 'mainview' // your xtype 
}] 

,然后你可以在你的视图的实例控制器与this.getMainView()

1

我试过没有好的结果秒。 我想要做的是类似的东西。根据你的回应应该工作

Ext.define('MyApp.view.MainView', { 
extend: 'Ext.container.Container', 
alias: 'widget.mainContainer', 
cls: ['mainContainer'], 
items: [ 
    { 
     xtype: 'panel', 
     items: [ 
      { 
       html: "my view" 
      } 
     ] 
    } 
]}); 

Ext.define('MyApp.controller.MainController', { 
extend: 'MyApp.controller.BaseController', 
refs: [ 
    { 
     ref: 'mainContainer', 
     selector: 'mainContainer' 
    } 
], 

init: function() { 
    this.getApplication().on({ 
     openDashboard: this.onOpenDashboard 
    }); 
}, 
onOpenDashboard: function() { 
    var mainContainerView = this.getMainContainer(); 
    mainContainerView.showSomething(); //mainContainerView should be an instance of the view. 
}}); 

其中,如果登录成功后openDashboard事件被触发。