【发布时间】:2014-11-28 12:49:35
【问题描述】:
我正在尝试在 ExtJS 中创建一个对话框窗口来执行保存功能,但我在加载页面时遇到了问题。
代码窗口定义的一个(简化)示例是:
Ext.define('MyRequest.SaveDraftOrTemplateWindow', {
extend: 'Ext.window.Window',
alias: 'widget.saveDraftOrTemplateWindow',
requires: ['Ext.toolbar.Toolbar'],
modal: true,
initComponent: function() {
this.items = [ saveDraftOrTemplateForm ];
Ext.apply(this, {
dockedItems: [{
xtype: 'toolbar',
items: [
{
iconCls: 'saveas-draft',
text: '<b>Save</b>',
id: 'saveDraftTemplate',
handler: saveAsDraftRequest(textFieldDraftOrTemplateName.getValue(), checkBoxSaveAsTemplate.getValue()),
scope: this
}
]
}]
});
this.callParent();
}
});
function saveAsDraftRequest(draftName, isTemplate) {
Ext.getBody().mask('Saving draft request...'); // Errors actually occurs on this line
}
// This line is the start of the stack causing the problem...
var saveDraftOrTemplateWindowInstance = Ext.create('MyRequest.SaveDraftOrTemplateWindow', {
Id: 'saveDraftOrTemplateWindow',
xtype: 'saveDraftOrTemplateWindow',
width: 400,
height: 180,
bodyPadding: 0
});
问题在于,页面最初加载时似乎“调用”了 saveAsDraftRequest() 函数,导致 Javascript 错误“Uncaught TypeError: Cannot read property 'mask' of null”,并防止页面加载。我真的不明白为什么此时调用该函数,因为在实际单击按钮之前可能不应该调用处理程序。
我假设如果页面已经正确加载,那么 Ext.getBody() 将正确返回结果而不是 null,但是为什么在初始页面加载期间会调用它?
【问题讨论】:
标签: javascript extjs extjs4.1