我刚刚被分配了一个被解雇的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));
},
答案 0 :(得分:0)
您应该在控制器构造函数的原型上定义该方法。 JavaScript引擎只是因为你没有定义getMyNewForm方法而呻吟;这不是魔术,你不能称之为随机方法。
你说getMyButton方法在代码中没有。嗯,这根本不可能。可能存在一种继承层次结构,并且您的控制器只是继承自在其原型上定义该方法的构造函数。
请记住,即使您定义了getMyNewForm方法,也应该返回定义loadRecord方法的“类”实例;这可能是一个特定的extjs“类”
答案 1 :(得分:0)
由于Evan Trimboli没有给出答案,让我这样做:
“你过早地调用它。在渲染任何视图之前调用控制器的init。”