最近项目提出一个新的需求:
FormPanel面板当前数据与初始数据不一致,在关闭这个面板之前,请提示用户数据已经更新,是否需要保存,
关闭则丢失之前的配置数据,请确认。这个应该属于用户体验友好性方面的需要
通过分析发现可以通过2个方法实现
1、监听FormPanel每个输入框值的变化。(下面我们实现的方式)
2、通过绑定一个Record,通过Record来监听值的变化。(这种方式在这里不做讨论)
这个功能是基于http://lyndon-lin.iteye.com/blog/1143045 这篇上写的。
下面我们是一步步来实现这个功能:
第1步:
给每个FormPanel的面板上的数据操作控件添加一个监听事件“change”,
(如果在ExtJS源代码,需要在Form面板的initFields中的f.add(c);这句代码添加下面的代码)
其实就是为了面板上每个控件添加一个值变化的事件。
c.on('change', function(me, newValue) {
if (Ext.isObject(newValue)) {//判断这个值是否是对象,如果是对象的话,可以是那些不通过getRawValue得到值的控件,例如RadioGroup
if (windowForm.record.get(c.id) != newValue.getRawValue()) {//如果新值与初始的值不一样则添加一个isModify的标识位为true
c.isModify = true;
} else {
delete c.isModify;//如果相同则删除掉这个标识位
}
else {
if (windowForm.record.get(c.id) != newValue) {
c.isModify = true;
} else {
delete c.isModify;
}
}
});
第2步:
获取FormPanel面板数据是否更新的方法
(如果在ExtJS源代码,需要在Form面板自定义名为isModified的方法)
通过循环查看是否有控件的数据更新,则得到该FormPanel的数据已经更新。
在我们关闭FormPanel的时候就是使用这个方法去判断,如果是则弹出一个友好提示框,提示用户。
也就是说下面这个方法是我们在外面使用来判断面板是否数据变化的方法。
isModified : function() {
var isM = false;
var windowForm = this;
var fn = function(c) {
if (windowForm.isField(c)) {
if (c.isModify == true) {
isM = true;
}
}
}
this.items.each(fn, this);
return isM;
}
第3步:
实现删除FormPanel面板上所有数据操作控件的值变更标识位的方法
(如果在ExtJS源代码,需要在Form面板自定义名为deleteModify的方法)
通过循环把标识位全部删除掉,因为有时候我们使用隐藏来关闭面板,所以在隐藏后应该把标识位删除位。
要不下次打开后,这些标识位还存在,这样就是会导致功能错误。
在这里代码如下:
deleteModify : function() {
var fn = function(c) {
if (this.isField(c)) {
if (c.isModify == true) {
delete c.isModify;
}
}
}
this.items.each(fn, this);
}
第4步:
数据重新初始化后,删除FormPanel面板上所有数据操作控件的值变更标识位。
(如果在ExtJS源代码,需要在BasicForm的reset方法中添加这个方法deleteModify();)
这里执行这个方法也是为了重置后,标识位删除掉后,关闭面板时就不用提示。
在这里代码如下:
onReset : function() {
this.deleteModify();
if (this.record) {
this.loadRecord(this.record);
} else {
this.form.reset();
}
}
上面就是全部实现这个功能的代码。如果想看效果可以把这些代码重写到Form,BasicForm这2个面板中即可。
当然也可以在我上面提到的“ExtJs自定义带Form功能的Window”这个功能的基础上添加,直接把这些代码粘贴到这个功能的代码里即可。
分享到:
相关推荐
FormPanel 是 ExtJS 中的一个核心组件,用于创建和处理表单元素,包括输入字段、按钮、选择框等。它提供了丰富的功能,如数据验证、远程提交、异步加载等,是构建用户交互界面的关键部分。 在ExtJS中,FormPanel是...
ExtJs 4.0的FormPanel对象提供了`getForm()`方法获取表单实例,然后通过`form.submit()`或`form.serialize()`方法完成数据的序列化。 4. **表单提交过程** - **创建表单组件**:首先,定义一个FormPanel,并在其...
4. **事件监听**:在某些情况下,可能需要监听`load`或`beforerender`等事件来确保数据在表单渲染前已经加载。 总之,ExtJS formpanel提供灵活的方式来加载数据,可以根据实际需求选择合适的方法。通过`loadRecord`...
3. **更新验证状态**:如果在表单已经初始化并显示的情况下添加字段,可能需要手动触发FormPanel的验证,可以使用`formPanel.getForm().isValid()`来检查整个表单是否有效。 4. **错误处理**:当验证失败时,EXT JS...
ExtJS支持数据双向绑定,这意味着表单字段与后台数据模型可以直接关联。通过`bind`方法或`form.loadRecord`方法可以加载和保存数据。 7. **表单验证**: 表单验证是确保用户输入符合预设规则的关键部分。ExtJS...
1. **创建FormPanel**:在前端使用ExtJs创建FormPanel,添加必要的表单字段。 2. **设置表单提交方式**:配置FormPanel的submit方法,指定服务器端处理脚本的URL。 3. **服务器端处理**:服务器端(ASP.net)接收...
EXTJS的FormPanel支持`submit()`方法,可以发起Ajax提交,将表单数据发送到服务器。 5. **Iframe Transport**: 由于HTML5的FormData对象和XMLHttpRequest API在某些老旧浏览器中可能不支持,EXTJS通常会使用隐藏的...
6. **表单组件**:ExtJS的FormPanel提供了丰富的表单元素,如文本框、下拉框、复选框等,并支持验证、提交等功能,使得创建复杂的表单变得轻松。 7. **图表组件**:虽然ExtJS 2.1的图表功能相对较弱,但仍然提供了...
同时,为了处理订单状态的变更,EXTJS的事件监听和处理机制将起到关键作用。 3. **文件结构分析**: - **App_Code**:通常在ASP.NET中存放自定义的服务器端代码,如C#或VB.NET类。 - **htmleditor**:可能包含一...
例如,可以通过监听FileField的`change`事件来实时更新文件列表,通过`beforeupload`事件来验证文件是否符合上传规则。 总而言之,EXTJS的批量上传文件功能是通过组合EXTJS FormPanel、FileField组件以及...
使用ExtJS的FormPanel和TextArea组件可以轻松创建这些元素,并通过监听事件来处理用户的输入和发送行为。 WebSocket的实现通常涉及到后端服务器的配置。服务器端需要使用支持WebSocket的库,如Node.js的`ws`库,...
8. **事件处理**:ExtJS有强大的事件系统,可以方便地监听和处理各种组件或应用级别的事件。 9. **工具栏和菜单**:提供创建和管理工具栏、下拉菜单的功能,丰富了用户界面。 10. **树形视图**:TreePanel组件用于...
3. **数据绑定**:ExtJS支持数据绑定,允许将数据模型与UI组件直接关联,实现数据的实时更新。这对于创建动态和响应式的应用至关重要。 4. **Store与Model**:Store是数据存储的容器,它可以加载远程数据,如JSON或...
1. 数据监听:监听`load`、`add`、`remove`等事件,以便在数据变化时触发相应操作,比如更新关联的FormPanel。 2. 自动刷新:设置`autoSync`为true,使Store在数据更改后自动与服务器同步。 3. 自定义数据加载:根据...
控制器监听到数据更改,调用Store的`sync()`方法将更新推送到服务器。 4. **删除(Delete)**:用户选择删除某条货物记录时,控制器捕获删除事件,根据选中的模型实例调用Store的`remove()`方法,然后执行`sync()`...
同时,可以设置行编辑器(RowEditing)或窗体编辑器(FormPanel)来实现对数据的编辑。在添加新记录时,通常会创建一个新的空白Model实例,然后插入到Store中。删除记录则是从Store中移除选定的Model,并同步到...
例如,了解GridPanel如何配置,如何使用FormPanel提交数据等。 六、EXTJS 3.04入门学习资源 "最新编排”EXTJS入门教程(超级详细)-20.pdf,可能是针对EXTJS 3.04的详细教程,涵盖了从基础概念到实际应用的全面指导。...
6. `stores/`: 员工数据的存储对象,负责数据加载、保存和监听数据变化。 7. `resources/`: 可能包含CSS样式文件、图片和其他资源。 8. `index.html`: 应用的启动页面,引入必要的ExtJS库和应用配置。 开发一个基于...
ExtJS的FormPanel和Store结合服务器接口,能够便捷地实现这些操作。 **实际开发项目实践** 这个"文学馆oa系统"案例展示了如何在实际开发中应用ExtJS,开发者可以从中学到如何构建模块化、可扩展的系统架构,以及...