0

我正在尝试从组件初始化中访问一个函数。Sencha Touch/Ext.js 的新手,所以不确定范围是如何工作的。我在“控制”中有“旋转”监听器,当增加时,它们似乎工作得很好。

简化代码:

Ext.define('App.view.CreateChallenge', {
    extend: 'Ext.Container',
    fullscreen: true,
    xtype: 'CreateChallenge',
    config:{ 
        items[
            xtype: 'spinnerfield',
            itemId: 'mySpin',
            initialize:function(){
                App.view.Challenge.doThis();
            }
        ],
    control:{
        '#mySpin' : {
            spin: 'doThis'

        }
    }
    },
    doThis:function(){
       console.log('dooing this');
    }
}); 

谢谢,史蒂夫

4

2 回答 2

2

首先,您不应该覆盖initialize配置块中的方法,正确的位置是在Ext.define.

然后,在 中initialize,您可以调用App.view.CreateChallenge.doThis()。但它只是一个普通的函数,它的作用域是全局window对象,所以你无法访问App.view.CreateChallenge.

要从其子项中查找容器引用,您可以使用Ext.Component.up(). 在你的情况下,它看起来像:

initialize: function() {
    …
    this.up('CreateChallenge').doThis(); // find container by xtype then call its method
}

我们还没有!如果你尝试,你会得到一个undefinedfrom this.up(…)。这是因为容器在其子项初始化时尚未完成构建。所以,如果需要在initialize方法中引用容器,就需要等到容器准备好,比如painted事件。

然后,您最终会得到如下所示的内容:

initialize: function() {
    …
    this.on('painted', function () {
        this.up('CreateChallenge').doThis(); // find container by xtype then call its method
    }, this);
}
于 2013-07-10T05:55:40.950 回答
0

我会简单地使用

VIEW/This .getParent()
于 2013-07-10T16:29:25.663 回答