控件之间相互调用
比如,有一个grid,上面有一个添加按钮。应该弹出一个window,在window进行保存工作。
点击保存之后,grid要更新。
他们之间的相互调用,难道都是使用getCmp()作为获取控件的途径吗?
请看是否达到你的要求,且结构清晰
var win;
var addrolewin;
var copywin;
var grid;
var expander;
var ds;
//编辑角色
function actionEditEvent() {
var record = grid.getSelectionModel().getSelected();
if (record) {
win = new Ext.Window({
id:id,
title:"编辑用户组",
iconCls:'edit',
layout:'fit',
width:650,
height:450,
closeAction:'close',
collapsible:true,
maximizable:true,
plain: true,
modal:true,
html : '<iframe frameborder="0" width="100%" height="100%" src="index.php?mo=groupman&do=editrole&id='+record.data['roles_id']+'"></iframe>'
});
win.on("beforedestroy",function(){
ds.reload();
});
win.show();
}
}
//添加角色
function newRole () {
addrolewin = new Ext.Window({
id:id,
title:"添加用户组",
iconCls:'add_role',
layout:'fit',
width:650,
height:450,
closeAction:'close',
collapsible:true,
maximizable:true,
plain: true,
modal:true,
html : '<iframe frameborder="0" width="100%" height="100%" src="index.php?mo=groupman&do=getroles"></iframe>'
});
addrolewin.on("beforedestroy",function(){
ds.reload();
});
addrolewin.show();
}
//复制角色
function copyRole () {
var id = getId(grid);
if (!id) {
Ext.Msg.alert('错误', '请选择一个用户组复制!');
} else {
copywin = new Ext.Window({
id:id,
title:"添加用户组",
iconCls:'add_role',
layout:'fit',
width:650,
height:450,
closeAction:'close',
collapsible:true,
maximizable:true,
plain: true,
modal:true,
html : '<iframe frameborder="0" width="100%" height="100%" src="index.php?mo=groupman&do=copyrole&id='+id+'"></iframe>'
});
copywin.on("beforedestroy",function(){
ds.reload();
});
copywin.show();
}
}
//生成表格
function makeGrid(){
return new Ext.grid.GridPanel({
border:false,
viewConfig: {
forceFit:true
},
buttonAlign :'left',
region:'center',
plugins: expander,
loadMask: true,
store: ds,
cm: new Ext.grid.ColumnModel([
expander,
new Ext.grid.RowNumberer(),
//new Ext.grid.CheckboxSelectionModel(),
{header:"ID",width:50,sortable:true,dataIndex:'roles_id'},
{header:"名称", width:100,sortable:false,dataIndex:'roles_<?php echo $user_languag;?>_name'},
{header:"类型", width:100,sortable:false,renderer:check,dataIndex:'roles_type'}
]),
//sm:new Ext.grid.CheckboxSelectionModel(),
//autoExpandColumn:4,
autoScroll: true,
tbar: [
{text:"添加",iconCls:'add_role',handler:newRole},{xtype:'tbseparator'},
//{text:"删除",iconCls:'del',handler:del},{xtype:'tbseparator'},
{text:"复制权限",iconCls:'copy',handler:copyRole},{xtype:'tbseparator'},
{text:"刷新",iconCls:'refresh',handler:function (){ds.reload();}},
'<font color="red">提示:双击一行可进行编辑!</font>'
],
bbar: new Ext.PagingToolbar({
pageSize: 50,
store: ds,
displayInfo: true,
displayMsg: '第{0} 到 {1} 条数据 共{2}条',
emptyMsg: '没有数据'
})
});
}
/*//删除
function del() {
var ids = getIds(grid);
if (ids) {
var dialog = Ext.Msg.show({
title:"删除用户组", msg: "确认要删除该用户组吗?",
icon:Ext.MessageBox.QUESTION, width:300,
fn:function(btn) {
if (btn =='ok') {
Ext.MessageBox.show({
title: "请稍等",
msg: "正在删除",
progressText: 'loading...',
width:300,
wait:true,
waitConfig: {interval:500}
});
setTimeout(function(){}, 10000);
//删除开始
Ext.Ajax.request({
url: 'index.php?mo=groupman&do=del&ids='+ids,
success: function(result){
Ext.Msg.alert("成功","删除成功!");
ds.reload();
}
});
//删除结束
}
},
buttons:{
ok:"确认",cancel:"取消"
}
});
} else {
Ext.Msg.alert("错误","服务器出现错误,请稍候再试!");
}
}*/
//自定义列
function check(value)
{
if (value==2)
{
return '<font color="red">管理员</font>';
}
else
{
return '普通';
}
}
Ext.onReady(function(){
ds = new Ext.data.Store({
proxy : new Ext.data.HttpProxy({url:'index.php?mo=groupman&do=list&'+Math.random()}),
reader: new Ext.data.JsonReader({
root: 'topics',
totalProperty: 'totalCount',
id: 'roles_id'
},[
'roles_id','roles_<?php echo $user_languag;?>_name','roles_type','games','users'
])
});
/*********************************************
Ext.grid.RowExpander插件
*********************************************/
Ext.grid.RowExpander = function(config){
Ext.apply(this, config);
this.addEvents({
beforeexpand : true,
expand: true,
beforecollapse: true,
collapse: true
});
Ext.grid.RowExpander.superclass.constructor.call(this);
if(this.tpl){
if(typeof this.tpl == 'string'){
this.tpl = new Ext.Template(this.tpl);
}
this.tpl.compile();
}
this.state = {};
this.bodyContent = {};
};
Ext.extend(Ext.grid.RowExpander, Ext.util.Observable, {
header: "",
width: 20,
sortable: false,
fixed:true,
menuDisabled:true,
dataIndex: '',
id: 'expander',
lazyRender : true,
enableCaching: true,
getRowClass : function(record, rowIndex, p, ds){
p.cols = p.cols-1;
var content = this.bodyContent[record.id];
if(!content && !this.lazyRender){
content = this.getBodyContent(record, rowIndex);
}
if(content){
p.body = content;
}
return this.state[record.id] ? 'x-grid3-row-expanded' : 'x-grid3-row-collapsed';
},
init : function(grid){
this.grid = grid;
var view = grid.getView();
view.getRowClass = this.getRowClass.createDelegate(this);
view.enableRowBody = true;
grid.on('render', function(){
view.mainBody.on('mousedown', this.onMouseDown, this);
}, this);
},
getBodyContent : function(record, index){
if(!this.enableCaching){
return this.tpl.apply(record.data);
}
var content = this.bodyContent[record.id];
if(!content){
content = this.tpl.apply(record.data);
this.bodyContent[record.id] = content;
}
return content;
},
onMouseDown : function(e, t){
if(t.className == 'x-grid3-row-expander'){
e.stopEvent();
var row = e.getTarget('.x-grid3-row');
this.toggleRow(row);
}
},
renderer : function(v, p, record){
p.cellAttr = 'rowspan="2"';
return '<div class="x-grid3-row-expander"> </div>';
},
beforeExpand : function(record, body, rowIndex){
if(this.fireEvent('beforeexpand', this, record, body, rowIndex) !== false){
if(this.tpl && this.lazyRender){
body.innerHTML = this.getBodyContent(record, rowIndex);
}
return true;
}else{
return false;
}
},
toggleRow : function(row){
if(typeof row == 'number'){
row = this.grid.view.getRow(row);
}
this[Ext.fly(row).hasClass('x-grid3-row-collapsed') ? 'expandRow' : 'collapseRow'](row);
},
expandRow : function(row){
if(typeof row == 'number'){
row = this.grid.view.getRow(row);
}
var record = this.grid.store.getAt(row.rowIndex);
var body = Ext.DomQuery.selectNode('tr:nth(2) div.x-grid3-row-body', row);
if(this.beforeExpand(record, body, row.rowIndex)){
this.state[record.id] = true;
Ext.fly(row).replaceClass('x-grid3-row-collapsed', 'x-grid3-row-expanded');
this.fireEvent('expand', this, record, body, row.rowIndex);
}
},
collapseRow : function(row){
if(typeof row == 'number'){
row = this.grid.view.getRow(row);
}
var record = this.grid.store.getAt(row.rowIndex);
var body = Ext.fly(row).child('tr:nth(1) div.x-grid3-row-body', true);
if(this.fireEvent('beforcollapse', this, record, body, row.rowIndex) !== false){
this.state[record.id] = false;
Ext.fly(row).replaceClass('x-grid3-row-expanded', 'x-grid3-row-collapsed');
this.fireEvent('collapse', this, record, body, row.rowIndex);
}
}
});
/////////////////////
expander = new Ext.grid.RowExpander({
tpl : new Ext.Template(
'<br> <b>游戏权限:</b> {games}<br><br>',
' <b>下属人员:</b> {users}<br><br>'
)
});
grid = makeGrid();
grid.addListener("rowdblclick", actionEditEvent);
var viewport = new Ext.Viewport({
layout:'border',
items:[grid]
});
ds.load({params:{start:0, limit:50}});
});
分享到:
相关推荐
本篇文章将详细探讨如何在MFC和Duilib之间进行控件的相互调用,以实现更灵活的用户界面设计。 首先,理解MFC和Duilib的基本结构是关键。MFC基于面向对象的设计,提供了丰富的控件类,如CButton、CEdit等,开发者...
为了使两者之间的控件能互相调用,你需要建立一个消息传递桥梁,比如通过全局函数或者自定义的消息队列。 3. **控件注册**:Duilib的控件需要注册到Duilib的消息循环中,而MFC的控件则是自动注册到MFC的消息循环中...
本文将详细介绍用户控件调用父页面的方法、用户控件与用户控件之间的方法调用、用户控件与用户控件之间设置属性、获得父页属性等技术,并提供了详细的代码示例。 一、用户控件调用父页面的方法 在 ASP.NET 中,...
本篇将深入探讨如何利用`Geckofx-v45.0`控件在C#和JavaScript之间实现无缝互调。 `Geckofx`是基于Mozilla Firefox的Gecko渲染引擎的一个.NET封装库,它允许.NET开发者在他们的应用程序中嵌入Web浏览器功能。`...
本主题将深入探讨“对话框之间的相互调用”这一关键知识点,包括主对话框(Main Dialog)如何调用子对话框(Child Dialog)以及子对话框如何反向调用主对话框。 一、主对话框调用子对话框 1. **创建子对话框资源**...
本文将详细介绍如何在C#的主窗体与子窗体之间进行控件的相互调用,并探讨几种不同的实现方式。 #### 1. 主窗体中调用子窗体控件 在主窗体中调用子窗体的控件非常简单,关键在于保留所创建的子窗体对象。以下是一种...
在C++编程中,类间函数的相互调用是一个常见的操作,它涉及到对象间的通信和协作。本实例通过VC6.0(一个经典的Microsoft Visual C++集成开发环境)展示了如何在一个对话框应用程序中实现类间函数的调用,以便用户...
在C#编程中,父窗口和子窗口之间的控件互操作是常见的需求,尤其是在开发多窗口应用程序时。这种互操作性允许用户在不同窗口间传递数据、触发事件或执行特定功能,增强了用户体验。本文将详细讲解如何在C#中实现这一...
尽管它们各自有着独特的特性和优势,但在实际项目中,开发者有时需要将两者结合,实现Winform窗体与WPF窗体的互相调用。这可以是因为团队已经有一部分基于Winform的应用,而新功能或界面设计则更适合WPF,或者是为了...
9. **调试和测试**: 在实际应用中,需要进行充分的测试以确保VC和VB控件之间的交互没有问题。可以使用VC的调试器来跟踪代码执行,检查调用是否成功以及预期的结果是否得到。 10. **性能优化**: 虽然跨语言调用可能...
当我们谈论“跨窗体”调用控件时,我们通常是指在一个窗体(Form)上操作的代码想要影响或与另一个窗体上的控件交互。在这个过程中,“委托”和“回调”扮演着关键的角色。本文将深入探讨这两个概念以及它们如何在C#...
本示例中,我们探讨的主题是“pyqt5实现两个界面之间的调用”。这通常涉及到窗口(QMainWindow)之间的导航,以及信号与槽(Signals and Slots)机制的使用,这是PyQt5中的核心概念,用于对象间的通信。 首先,我们...
本文将深入探讨C#窗体与GeckoFX浏览器之间的相互调用,帮助开发者理解如何利用这种技术实现复杂的功能集成。 首先,我们要明白C#窗体(WinForms)是.NET Framework提供的一种用户界面设计工具,用于创建交互式的...
本文将深入探讨各种类和视图之间相互调用的关键知识点,旨在为开发者提供一个全面的理解和实践指南。 一、基本概念 1. 类(Class):在编程中,类是一种抽象的数据类型,它定义了对象的状态(属性)和行为(方法)...
本文将详细探讨如何实现C++与JavaScript的互相调用,以及在这个过程中涉及的关键知识点。 首先,我们要了解C++和JavaScript是两种完全不同的编程语言,它们的应用场景各有侧重。C++是一种静态类型的、编译型的语言...
本项目"真实实现多个树控件之间的拖拽"正是关注这一领域,它提供了在多个树控件间进行对象拖放的解决方案。 首先,让我们了解一些关键文件的作用: 1. `dragdroptreeDlg.cpp`: 这是主对话框类的实现文件,通常包含...
在实际应用中,可能还需要处理Winform控件和WPF控件之间的交互。例如,可以监听Winform控件的事件并在WPF代码后面处理。通过使用`WindowsFormsHost`的`Child`属性,我们可以访问并操作Winform控件。 相反,如果要在...
本示例将探讨如何在WPF中实现Window窗口与Page页之间的相互调用,构建一个简单的导航框架。 首先,了解Window和Page的基本概念: 1. **Window**: WPF中的顶级窗口,它可以包含多个元素,如ContentControl、Canvas等...