ext4.0 frompanel和comboBox的问题,求解答 ext4combobox 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 调用show/hide方法就好了吧,你销毁了容器,那不是从DOM树中删除了,再次调用可能是得到null引用什么的了。。 换成hide隐藏,再次调用还是一样的错误对了,我调用的方式:if (node.raw.type === 'FORM') { if (!Ext.getCmp(node.data.text + node.data.id)) {// 判断窗口是否已被打开 var panel = Ext.create( 'AM.view.' + node.raw.component, { id : node.data.text + node.data.id, //title : node.data.text, closable : false, iconCls : 'icon-activity' }); var win = Ext.create('AM.view.FromWindow',{ //height : panel.getHeight(), title : node.data.text, width : panel.getWidth(), items : panel }); win.show(); } 换成hide隐藏,再次调用还是一样的错误 本帖最后由 showbo 于 2014-04-09 09:17:24 编辑 换成hide隐藏,再次调用还是一样的错误就没见你改了哪里hide{ text : '关 闭', handler : function() { alert(Ext.getCmp("dw1")); //this.ownerCt.ownerCt.destroy(); this.ownerCt.ownerCt.hide()////////////////// }谢谢大大耐心解答,不过,我这么也改过,还是出一样的错误 我觉的是comboBox的问题,因为我用普通的textfield,没有错误 你其他代码有问题吧。。你放到window里面,点击window的那个x也会销毁这个form,我这里测试你那个就没有问题,不过store是本地的<script> Ext.onReady(function () { Ext.create("Ext.form.Panel", { autoHeight: true, width: 500, draggable: false, resizable: false, frame: true, bodyPadding: 5, border: 1, id:'formPanel',//加个id fileUpload: true, defaults: { labelSeparator: ':', allowBlank: false, labelAlign: 'left', msgTarget: 'side' }, items: [Ext.create('Ext.form.ComboBox', { fieldLabel: '单位名称', labelWidth: 80, id: 'dw1', autoCreated: false, editable: false, name: 'dw', allowBlank: false, triggerAction: 'all', anchor: '100%', emptyText: '请选择...', store: Ext.create('Ext.data.Store', { data: [{ id: 1, name: 'abc' }, { id: 2, name: 'abcd'}], fields: ['id', 'name'] }), value: '', valueField: 'id', displayField: 'name' }), { xtype: "textfield", labelWidth: 80, anchor: '100%', fieldLabel: '项目名称', name: 'projectName' }, { layout: 'column', padding: 0, border: 0, frame: true, items: [{ columnWidth: .33, padding: 0, border: 0, items: [{ xtype: "textfield", labelWidth: 80, anchor: '100%', fieldLabel: '提出人姓名', allowBlank: false, msgTarget: 'side', name: 'proposer' }] }, { columnWidth: .33, padding: '0 0 0 2', border: 0, items: [] }, { columnWidth: .33, padding: '0 0 0 2', border: 0, items: [] }] }, { layout: 'column', padding: 0, border: 0, items: [{ columnWidth: .5, padding: 0, border: 0, items: [{ xtype: "datefield", labelWidth: 80, width: 230, fieldLabel: '建议提出时间', allowBlank: false, msgTarget: 'side', name: 'proposeTime' }] }, { columnWidth: .5, padding: '0 0 0 2', border: 0, items: [{ xtype: "datefield", labelWidth: 80, width: 230, fieldLabel: '建议完成时间', allowBlank: false, msgTarget: 'side', name: 'finshTime' }] }] }, { layout: 'column', padding: 0, border: 0, items: [{ columnWidth: .33, padding: 0, border: 0, items: [{ xtype: "textfield", labelWidth: 80, anchor: '100%', fieldLabel: '预计效益', allowBlank: false, msgTarget: 'side', name: 'expectedBenefit' }] }, { columnWidth: .33, padding: '0 0 0 2', border: 0, items: [{ xtype: "textfield", labelWidth: 70, anchor: '100%', fieldLabel: '实际效益', allowBlank: false, msgTarget: 'side', name: 'actualBenefit' }] }, { columnWidth: .33, padding: '0 0 0 2', border: 0, items: [] }] }, { layout: 'column', padding: 0, border: 0, items: [{ columnWidth: .33, padding: 0, border: 0, items: [{ xtype: "textfield", labelWidth: 80, anchor: '100%', fieldLabel: '项目负责人', allowBlank: false, msgTarget: 'side', name: 'leader' }] }, { columnWidth: .33, padding: '0 0 0 2', border: 0, items: [] }, { columnWidth: .33, padding: '0 0 0 2', border: 0, items: [] }] }, { layout: 'table', columns: 4, border: 0, items: [{ border: 0, width: 120, bodyStyle: 'text-align:center', html: "<font size='2'>主要实施人</font>" }, { border: 0, width: 120, bodyStyle: 'text-align:center', html: "<font size='2'>年龄</font>" }, { border: 0, width: 120, bodyStyle: 'text-align:center', html: "<font size='2'>职务</font>" }, { border: 0, width: 120, bodyStyle: 'text-align:center', html: "<font size='2'>职称</font>" }] }, { columnWidth: 1, style: 'padding-top:5px', layout: 'column', bodyStyle: 'text-align:center', border: 0, items: [{ columnWidth: 1, border: 0, html: "<font size='2'>项目相关描述</font>" }] }, { columnWidth: 1, border: 0, layout: 'column', items: [{ columnWidth: 1, xtype: "textarea", anchor: '100%', name: 'leader' }] }, { columnWidth: 1, layout: 'column', style: 'padding-top:8px', labelWidth: 70, border: 0, items: [{ anchor: '100%', allowBlank: true, msgTarget: 'side', columnWidth: 1, xtype: 'fileuploadfield', id: 'filepath', name: 'filepath', emptyText: '', fieldLabel: '<font size="2">其他说明文件</font>', buttonCfg: { text: '浏览....', iconCls: 'upload-file' } }] }], buttons: [{ id: 'btnOk', text: '确 定', handler: function () { var fp = this.ownerCt.ownerCt; alert(fp.id); Ext.MessageBox.show({ msg: '正在保存,请稍等...', progressText: 'Saving...', width: 300, wait: true, waitConfig: { interval: 200 }, icon: 'download', animEl: 'saving' }); fp.form.submit({ url: '', method: 'post', success: function (form, action) { var flag = action.result.success; if (flag == true) { Ext.MessageBox.alert('恭喜', '添加信息成功!'); Datas.reload(); fp.destroy(); } }, failure: function () { Ext.Msg.alert('错误', '服务器出现错误请稍后再试!'); } }); } }, { text: '关 闭', handler: function () { this.ownerCt.ownerCt.hide(); } }], renderTo: Ext.getBody() }); }); function toggleForm() { var f = Ext.getCmp('formPanel') f[f.isVisible() ? 'hide' : 'show'](); }</script><input type="button" onclick="toggleForm()" value="toggleState" /> Extjs 很多时候有自己的bug,这个是真的。 楼主不妨试试看Ext.create('Ext.form.ComboBox', { fieldLabel : '单位名称', // UI标签名称 labelWidth : 80, id:'dw1', editable : false, name : 'dw', // 作为form提交时传送的参数名 allowBlank : false, // 是否允许为空 //mode : "remote", // 数据模式为远程模式, 也可不设置,即默认值也为remote // readOnly : true, // 是否只读 triggerAction : 'all', // 显示所有下列数.必须指定为'all' anchor : '100%', emptyText : '请选择...', // 没有默认值时,显示的字符串 store : Ext.create('AM.store.MyFactoryStore'), value : '', // 设置当前选中的值, 也可用作初始化时的默认值, 默认为空 valueField : 'id', // 传送的值 displayField : 'name' // UI列表显示的文本 })吧这个代码改成 config的方式,而不是显示的create方式。简单在4的版本下,很有可能是在代码执行到生成你这个类的时候, 该combo已经被实例化了。那么你首次去实例化你 的类的时候*(也就是你这里的window),那么然后关闭,这个时候同事把combo也释放了,然后等你再次实例化后, combo已经不会被再次实例化。(以上是猜测,但是一定适合有写情况,至于楼主是不是这个问题,请自己核查) 算是解决了,就是把所有的属性都放在Ext.apply()里面,至于为什么不知道网上找到的,试了下,不出错了Ext.define("AM.view.ProjectDeclaration", { extend : 'Ext.form.Panel', initComponent : function() { Ext.apply(this, { autoHeight : true, width : 500, draggable : false, resizable : false, frame : frameValue, bodyPadding : 5, border : 1, fileUpload : true, defaults : {// 统一设置表单字段默认属性 labelSeparator : ':', // 标签和控件的分隔符 allowBlank : false, // 控件是否允许为空,设置为不允许为空 labelAlign : 'left', // 标签对齐方式 msgTarget : 'side' // 验证后字段在控件右边提示信息 }, items : [Ext.create('Ext.form.ComboBox', { fieldLabel : '单位名称', // UI标签名称 labelWidth : 8.... text : '关 闭', handler : function() { this.ownerCt.ownerCt.destroy(); } }], renderTo : Ext.getBody() }); this.callParent(arguments); }});谢谢你的耐心解答 javascript调用别的元素上的事件 动态建表的苦恼,求助!!! 关于jquery dialog的同步和异步问题 这个object为什么显示未定义呢?求高手解释一下 jQuery基础资料 怎样判断结点类型 我用EXTjs写了一个表格面板,就是数据一直读不出来,高手帮忙看看,急,下面是代码及显示页面 急急急急急!!!!!!!!!!!!!!!!!!!!! To:孟子E章,还是昨天的问题,请再帮个忙! 求助关于html编辑器的问题! 特急!在线等待! 性别男女的字符值在显示时怎么根据 值‘男’或 值‘女’来显示出选中效果 JavaScript的桌面程序,把云存储当硬盘、网盘当U盘、web应用当软件。
对了,我调用的方式:
if (node.raw.type === 'FORM') {
if (!Ext.getCmp(node.data.text + node.data.id)) {// 判断窗口是否已被打开
var panel = Ext.create(
'AM.view.' + node.raw.component, {
id : node.data.text + node.data.id,
//title : node.data.text,
closable : false,
iconCls : 'icon-activity'
});
var win = Ext.create('AM.view.FromWindow',{
//height : panel.getHeight(),
title : node.data.text,
width : panel.getWidth(),
items : panel
});
win.show();
}
换成hide隐藏,再次调用还是一样的错误
换成hide隐藏,再次调用还是一样的错误就没见你改了哪里hide{
text : '关 闭',
handler : function() {
alert(Ext.getCmp("dw1"));
//this.ownerCt.ownerCt.destroy();
this.ownerCt.ownerCt.hide()//////////////////
}
谢谢大大耐心解答,不过,我这么也改过,还是出一样的错误
<script>
Ext.onReady(function () {
Ext.create("Ext.form.Panel", {
autoHeight: true,
width: 500,
draggable: false,
resizable: false,
frame: true,
bodyPadding: 5,
border: 1,
id:'formPanel',//加个id
fileUpload: true,
defaults: {
labelSeparator: ':',
allowBlank: false,
labelAlign: 'left',
msgTarget: 'side'
},
items: [Ext.create('Ext.form.ComboBox', {
fieldLabel: '单位名称',
labelWidth: 80,
id: 'dw1',
autoCreated: false,
editable: false,
name: 'dw',
allowBlank: false,
triggerAction: 'all',
anchor: '100%',
emptyText: '请选择...',
store: Ext.create('Ext.data.Store', { data: [{ id: 1, name: 'abc' }, { id: 2, name: 'abcd'}], fields: ['id', 'name'] }),
value: '',
valueField: 'id',
displayField: 'name'
}), {
xtype: "textfield",
labelWidth: 80,
anchor: '100%',
fieldLabel: '项目名称',
name: 'projectName'
}, {
layout: 'column',
padding: 0,
border: 0,
frame: true,
items: [{
columnWidth: .33,
padding: 0,
border: 0,
items: [{
xtype: "textfield",
labelWidth: 80,
anchor: '100%',
fieldLabel: '提出人姓名',
allowBlank: false,
msgTarget: 'side',
name: 'proposer'
}] }, {
columnWidth: .33,
padding: '0 0 0 2',
border: 0,
items: [] }, {
columnWidth: .33,
padding: '0 0 0 2',
border: 0,
items: [] }]
}, {
layout: 'column',
padding: 0,
border: 0,
items: [{
columnWidth: .5,
padding: 0,
border: 0,
items: [{
xtype: "datefield",
labelWidth: 80,
width: 230,
fieldLabel: '建议提出时间',
allowBlank: false,
msgTarget: 'side',
name: 'proposeTime'
}] }, {
columnWidth: .5,
padding: '0 0 0 2',
border: 0,
items: [{
xtype: "datefield",
labelWidth: 80,
width: 230,
fieldLabel: '建议完成时间',
allowBlank: false,
msgTarget: 'side',
name: 'finshTime'
}] }]
}, {
layout: 'column',
padding: 0,
border: 0,
items: [{
columnWidth: .33,
padding: 0,
border: 0,
items: [{
xtype: "textfield",
labelWidth: 80,
anchor: '100%',
fieldLabel: '预计效益',
allowBlank: false,
msgTarget: 'side',
name: 'expectedBenefit'
}] }, {
columnWidth: .33,
padding: '0 0 0 2',
border: 0,
items: [{
xtype: "textfield",
labelWidth: 70,
anchor: '100%',
fieldLabel: '实际效益',
allowBlank: false,
msgTarget: 'side',
name: 'actualBenefit'
}] }, {
columnWidth: .33,
padding: '0 0 0 2',
border: 0,
items: [] }]
}, {
layout: 'column',
padding: 0,
border: 0,
items: [{
columnWidth: .33,
padding: 0,
border: 0,
items: [{
xtype: "textfield",
labelWidth: 80,
anchor: '100%',
fieldLabel: '项目负责人',
allowBlank: false,
msgTarget: 'side',
name: 'leader'
}] }, {
columnWidth: .33,
padding: '0 0 0 2',
border: 0,
items: [] }, {
columnWidth: .33,
padding: '0 0 0 2',
border: 0,
items: [] }]
}, {
layout: 'table',
columns: 4,
border: 0,
items: [{
border: 0,
width: 120,
bodyStyle: 'text-align:center',
html: "<font size='2'>主要实施人</font>"
}, {
border: 0,
width: 120,
bodyStyle: 'text-align:center',
html: "<font size='2'>年龄</font>"
}, {
border: 0,
width: 120,
bodyStyle: 'text-align:center',
html: "<font size='2'>职务</font>"
}, {
border: 0,
width: 120,
bodyStyle: 'text-align:center',
html: "<font size='2'>职称</font>"
}]
}, {
columnWidth: 1,
style: 'padding-top:5px',
layout: 'column',
bodyStyle: 'text-align:center',
border: 0,
items: [{
columnWidth: 1,
border: 0,
html: "<font size='2'>项目相关描述</font>"
}]
}, {
columnWidth: 1,
border: 0,
layout: 'column',
items: [{
columnWidth: 1,
xtype: "textarea",
anchor: '100%',
name: 'leader'
}] }, {
columnWidth: 1,
layout: 'column',
style: 'padding-top:8px',
labelWidth: 70,
border: 0,
items: [{
anchor: '100%',
allowBlank: true,
msgTarget: 'side',
columnWidth: 1,
xtype: 'fileuploadfield',
id: 'filepath',
name: 'filepath',
emptyText: '',
fieldLabel: '<font size="2">其他说明文件</font>',
buttonCfg: {
text: '浏览....',
iconCls: 'upload-file'
}
}]
}],
buttons: [{
id: 'btnOk',
text: '确 定',
handler: function () {
var fp = this.ownerCt.ownerCt;
alert(fp.id);
Ext.MessageBox.show({
msg: '正在保存,请稍等...',
progressText: 'Saving...',
width: 300,
wait: true,
waitConfig: {
interval: 200
},
icon: 'download',
animEl: 'saving'
});
fp.form.submit({
url: '',
method: 'post',
success: function (form, action) {
var flag = action.result.success;
if (flag == true) {
Ext.MessageBox.alert('恭喜', '添加信息成功!');
Datas.reload();
fp.destroy();
}
},
failure: function () {
Ext.Msg.alert('错误', '服务器出现错误请稍后再试!');
}
});
}
}, {
text: '关 闭',
handler: function () {
this.ownerCt.ownerCt.hide();
}
}],
renderTo: Ext.getBody()
});
});
function toggleForm() {
var f = Ext.getCmp('formPanel')
f[f.isVisible() ? 'hide' : 'show']();
}
</script>
<input type="button" onclick="toggleForm()" value="toggleState" />
fieldLabel : '单位名称', // UI标签名称
labelWidth : 80,
id:'dw1',
editable : false,
name : 'dw', // 作为form提交时传送的参数名
allowBlank : false, // 是否允许为空
//mode : "remote", // 数据模式为远程模式, 也可不设置,即默认值也为remote
// readOnly : true, // 是否只读
triggerAction : 'all', // 显示所有下列数.必须指定为'all'
anchor : '100%',
emptyText : '请选择...', // 没有默认值时,显示的字符串
store : Ext.create('AM.store.MyFactoryStore'),
value : '', // 设置当前选中的值, 也可用作初始化时的默认值, 默认为空
valueField : 'id', // 传送的值
displayField : 'name' // UI列表显示的文本
})
吧这个代码改成 config的方式,而不是显示的create方式。
简单在4的版本下,很有可能是在代码执行到生成你这个类的时候, 该combo已经被实例化了。那么你首次去实例化你 的类的时候*(也就是你这里的window),那么然后关闭,这个时候同事把combo也释放了,然后等你再次实例化后, combo已经不会被再次实例化。(以上是猜测,但是一定适合有写情况,至于楼主是不是这个问题,请自己核查)
extend : 'Ext.form.Panel',
initComponent : function() {
Ext.apply(this, {
autoHeight : true,
width : 500,
draggable : false,
resizable : false,
frame : frameValue,
bodyPadding : 5,
border : 1,
fileUpload : true,
defaults : {// 统一设置表单字段默认属性
labelSeparator : ':', // 标签和控件的分隔符
allowBlank : false, // 控件是否允许为空,设置为不允许为空
labelAlign : 'left', // 标签对齐方式
msgTarget : 'side' // 验证后字段在控件右边提示信息
}, items : [Ext.create('Ext.form.ComboBox', {
fieldLabel : '单位名称', // UI标签名称
labelWidth : 8
....
text : '关 闭',
handler : function() {
this.ownerCt.ownerCt.destroy();
}
}],
renderTo : Ext.getBody()
});
this.callParent(arguments);
}
});
谢谢你的耐心解答