2

在我的应用程序中,我有一个带有一个项目的视口,一个主视图,它是一个从 Ext.container.Container 扩展的简单类。

我也有一个主控制器,我正在尝试获取视图实例,因此如果用户登录与否,我可以动态推送相应的项目。

我试过使用视图:['MainView']、refs[ { selector: 'thextype' }] 等,但没有成功。

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

只是为了澄清,我不是要获取 DOM 元素,而是要使用相关方法获取视图实例。

提前致谢,

4

3 回答 3

4

定义视图的 xtype:

xtype: 'mainview'

然后在你的控制器中:

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

然后你可以在控制器中获取你的视图实例this.getMainView()

于 2013-07-31T22:30:22.343 回答
1

经过一段时间的调试,问题似乎出在调用函数的上下文上。

我在 init 方法中添加了如下一行:

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

它奏效了。

谢谢!

于 2013-08-02T19:24:46.770 回答
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 事件。

于 2013-08-01T14:17:00.777 回答