如何创建getter和setter

时间:2014-01-17 11:40:17

标签: javascript extjs

我刚刚被分配了一个被解雇的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));
 },

2 个答案:

答案 0 :(得分:0)

您应该在控制器构造函数的原型上定义该方法。 JavaScript引擎只是因为你没有定义getMyNewForm方法而呻吟;这不是魔术,你不能称之为随机方法。

你说getMyButton方法在代码中没有。嗯,这根本不可能。可能存在一种继承层次结构,并且您的控制器只是继承自在其原型上定义该方法的构造函数。

请记住,即使您定义了getMyNewForm方法,也应该返回定义loadRecord方法的“类”实例;这可能是一个特定的extjs“类”

答案 1 :(得分:0)

由于Evan Trimboli没有给出答案,让我这样做:

“你过早地调用它。在渲染任何视图之前调用控制器的init。”