声明:这个并不是所谓发明创举,Ext 2.0 的example中的示例都基于这样的设计。在此,我列出一两种融入了我目前所使用的.net框架的实现。
优点:这样的设计得到的是一个个包含各种特性的对象,也就是说,只要页面引入相应的js文件,我们便可以直接获取到这个对象。比如,我设计了一个弹出窗
口,它包含了某张表完整的增删改差的功能,那么我可以在任何需要用到它的地方产生这个窗口,而无须写另外的实现,仅需要一行代码(类似于c#.net的用
户控件了)。
首先,先列出一个关于store的定义吧:
KeStore.js
KeStore = function(data){
KeStore.superclass.constructor.call(this, {
remoteSort: true,
data: data,
reader: new Ext.data.JsonReader
({}, [
{name: 'MId', type: 'int'},
{name: 'KId'},
{name: 'KName'},
{name: 'IndexDirectory'}
])
});
}
Ext.extend(KeStore, Ext.data.Store);
当我们页面引入KeStore.js后,就可以直接在js里面产生相应的对象了,var ks = new
KeStore(data);,这里的data为你所获得的数据。可能很多人会关心如何更新它数据的问题,使用ks.loadData(data);方法
可以更新它的数据。那么,现在的问题在于如何获取data(符合定义的Json数据)的问题了:这个在前面json json-rpc
如何在项目中便宜引入Ajax框架 (Joyrock开源项目)
这篇文章中,介绍了怎么利用Joyrock开源项目的动态链接库文件,远程调用后台业务逻辑,并得到数据的过程。
还有另一种方式更新ks的数据,而无须用到Joyrock项目的东东:
TopicStore = function(tid){
TopicStore.superclass.constructor.call(this, {
remoteSort: true,
proxy:new Ext.data.HttpProxy({url:'http://localhost:2433/KDG/PersonplatManager/JsonData/PersonplatData.aspx?typeId=' + tid}),
reader: new Ext.data.JsonReader({
totalProperty : 'totalCount',
root : 'root',
id : 'KdgPointId'
},[
{name: 'KdgPointId'},
{name: 'KdgTitle'},
{name: 'KdgKeyWord'},
{name: 'KdgLabel'},
{name: 'Remark'},
{name: 'IsAvailible', type: 'int'},
{name: 'StatusId', type: 'int'}
])
});
this.setDefaultSort('KdgPointId', 'desc');
};
Ext.extend(TopicStore, Ext.data.Store, {
loadData : function(typeId){
this.proxy = new Ext.data.HttpProxy({
url:'http://localhost:2433/KDG/PersonplatManager/JsonData/PersonplatData.aspx?typeId='
+ typeId});
this.load();
},
loadQuery : function(typeId, kdg_kd, kdg_tt, kdg_con){
var url = 'http://localhost:2433/KDG/PersonplatManager/JsonData/PersonplatData.aspx?typeId=' + typeId;
if(kdg_kd != "")
url += '&KdgKeyWord=' + kdg_kd;
if(kdg_tt != "")
url += '&KdgTitle=' + kdg_tt;
if(kdg_con != "")
url += '&KdgContent=' + kdg_con;
this.proxy = new Ext.data.HttpProxy({ url: url});
this.load();
}
});
在新建TopicStore对象时候,就需要传入一个参数,TopicStore ts = new TopicStore(3);,更新数据,写了两个方法,loadData()与loadQuery()。在需要更新时候,调用这两个方法,并对应地传递参数即可。
如此我们可以定义这样一个可编辑的下拉列表了:
KtindexEditGrid.js
KtindexEditGrid = function(){
// 列模型的定义
var fm = Ext.form;
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),{
id:'MId',
align: 'right',
header: "关联序号", // 表头
dataIndex: 'MId', // 表数据字段
width: 80,
editor: new fm.TextField({
allowBlank: false, // 是否允许为空
disabled : true // 是否允许更改,true意味着你无法修改当前单元格的值
})
},{
header: "知识类序号",
dataIndex: 'KId',
width: 80,
editor: new fm.TextField({
allowBlank: false,
disabled : true
})
},{
header: "知识类名称",
dataIndex: 'KName',
width: 130,
editor: new fm.TextField({
allowBlank: false,
disabled : true
})
},{
header: "索引目录",
dataIndex: 'IndexDirectory',
width: 160,
editor: new fm.TextField({
allowBlank: false
})
}
]);
// 底部Toolbar上的元素
var kdgTypeIdHide = new fm.Hidden({id:'kdgTypeId'}); // 隐藏域
var kdgTypeName = new fm.TextField({ disabled:true,width:120,id:'kdgTypeName' });
var indexDir = new fm.TextField({ width:150,id:'indexDir'});
// json-rpc 获取数据
// KdgPoints是一个.ashx(一般程序文件),它调用后台业务逻辑,得到DataTable,
// 经过处理后返回符合json格式的数据
var kdgPointAshx = new KdgPoints();
var obData = kdgPointAshx.Get_KdgType_IndexDir_Mapping('');
// 这里用到了前面定义的store了
var store = new KeStore(obData);
// 基类结构的定义
KtindexEditGrid.superclass.constructor.call(this, {
store: store, // 数据源
region:'center',
cm: cm, // 列模型
bbar: [{ // 底部Toolbar,若想改为顶部,使用tbar属性
text: '知识类名称',
tooltip: '点击左边树更改文本框数值'
},kdgTypeName,{
text: '索引目录',
tooltip: '索引文件放置目录'
},indexDir,{
text: '新增',
tooltip: '添加关联',
handler: newRecord
},{
text: '保存',
tooltip: '保存可编辑Grid的修改',
handler: save
},kdgTypeIdHide]
});
// 上面handler属性会回调相应的函数,这个为了阐述方便,截断了.... 在文章下半部分放上来
});
Ext.extend(KtindexEditGrid, Ext.grid.EditorGridPanel); // 继承定义
页面包含KtindexEditGrid.js后,便可以新建它的对象了。你可以将它作为items的一部分,添加到Ext布局里面去,同样调用render('grid-example')直接绘制到<div>上。
剩下的就是回调函数的一些补充了:
/* ---------------------------- 新增事件 ----------------------------- */
function newRecord()
{
if(kdgTypeIdHide.getValue() == '')
{
Ext.MessageBox.show({
title:'提示',
msg: '知识类不能为空,请单击左边树节点,设置它的值',
buttons: Ext.Msg.OK
});
return;
}
if(indexDir.getValue() == '')
{
Ext.MessageBox.show({
title:'提示',
msg: '索引目录不能为空,请输入',
buttons: Ext.Msg.OK
});
indexDir.focus();
return;
}
Ext.MessageBox.confirm('提示', '确定添加记录?',doNewRecord);
}
function doNewRecord(btn)
{
if(btn == 'yes')
{
var kdgId = kdgTypeIdHide.getValue();
var dir = indexDir.getValue();
var jsonData = { 'KId':kdgId, 'IndexDirectory':dir }
// json-rpc
var kdgPointAshx = new KdgPoints();
var flag = kdgPointAshx.Insert_KdgType_IndexDir_Mapping(jsonData);
if(flag == true)
Ext.MessageBox.show({
title:'提示',
msg: '保存成功',
buttons: Ext.Msg.OK
});
else
Ext.MessageBox.show({
title:'提示',
msg: '保存失败',
buttons: Ext.Msg.OK
});
var data = kdgPointAshx.Get_KdgType_IndexDir_Mapping(kdgId);
store.loadData(data);
}
}
分享到:
相关推荐
NULL 博文链接:https://angie-hawk7.iteye.com/blog/925390
想学习ext面向对象编程的同仁可以仔细看下。
Ext的面向对象实例: 1.命名空间 2.类实例属性 3.类实例方法 4.类静态方法 5.构造方法 6.类继承 7.类实例方法重写 8.命名空间别名 9.类别名 10.事件队列
目的:该示例非常详细注释说明Ext的面向对象的编程方式,使用继承,然后重写父类的方法,以及注册自定义事件说明Ext框架是事件驱动的框架编程。 阅读对象:本中心学习Ext面向对象编程的人员 阅读条件:掌握OO的思路...
一个Ext的上传文件的控件。修改过的源码。能上传中文文件。
自己第一次用Ext做的时间段选择控件,是参考公司了另一同事的控件修改的希望对大家有用。
EXT dojochina Ext类继承.rar EXT dojochina Ext类继承.rar
EXT日期加时间控件 EXT日期加时间控件
EXT 时间控件 EXT 时间控件EXT 时间控件
带动Ext.DateTimePicker设置 * 4,增加时期时间选择器变动时的样式变化功能 * 5,解决GRID中使用时,同列同对象间值影响的问题 * 6,解决原组件,点击today按钮时,无法回到选择器当日界面的问题 */ 另外此控的时分...
Ext自定义控件库,自己封装过的的一些ext控件,可以根据自己需要选择
ext基本的控件例子ext基本的控件例子ext基本的控件例子ext基本的控件例子ext基本的控件例子
ext asp.net控件 Ext是一个强大的AJAX开源代码。本控件是集成了Ext的ASPNET控件
EXT dojoChina按钮控件示例 Ext.Button.rarEXT dojoChina按钮控件示例 Ext.Button.rarEXT dojoChina按钮控件示例 Ext.Button.rarEXT dojoChina按钮控件示例 Ext.Button.rar
Ext控件详细资料,使用所有it人事学习。容易掌握。
Ext日期时间控件 Spiiner控件及其它Ext代码
Ext表格控件和树控件,请关注后续发布,不断更新中
这个压缩包是本人从Ext官方论坛收集的用户扩展控件,针对EXT版本2.x,里面有树表格,图表控件,上传控件,表格过滤控件,通知窗口控件等等。 大部分解压后放入ext的example文件夹下就可以运行,有少数几个需要部署到...
将Ext封装为.net控件,通过简单的拖拽就可设计出很酷的Ext页面.
实现ext与JSON的数据传递和显示,以及ext树的事件响应