我刚刚分配了一个被解雇的extjs开发人员的项目。在他制作的控制器中,我发现像

this.getMyButton().toggle(true);
this.getMyContainer().getLayout()...


因此,我只是向视图添加了一个新表单(我的前同事应该在圣诞节之前完成的一件事情),并尝试使用以下方法从控制器中调用它

this.getMyNewForm().loadRecord(someStore.getAt(0));


Chrome告诉我this.getMyNewForm()未定义。但是我在代码中没有找到getMyButton()的定义。

怎么了如何定义getMyNewForm()

编辑:文档(http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.app.Controller-cfg-refs)回答的问题,但问题仍然存在。

Ref在控制器中正确定义:

refs: [{
    ref       :'MyNewForm',
    selector  :'form[id=myNewForm]'
}]


在视图中正确定义了MyNewForm

    items: [{
        xtype: 'form',
        header:false,
        frame:false,
        id:'myNewForm',
        items: [{


但是当我打电话时它不起作用

 init: function() {
    this.control({
    });
    this.getMyNewForm().loadRecord(someStore.getAt(0));
 },

最佳答案

您应该在控制器的构造函数的原型上定义该方法。 JavaScript引擎抱怨的原因很简单,因为您尚未定义getMyNewForm方法。这不是魔术,您不能调用随机方法。

您说getMyButton方法在代码中不存在。好吧,那根本不可能。可能是存在某种继承层次结构,并且您的控制器只是从构造函数中继承,该构造函数在其原型上定义了该方法。

切记,即使定义了getMyNewForm方法,也应返回定义loadRecord方法的“类”的实例。这可能是extjs特有的“类”

09-25 16:50