最近开发的一个功能模块中,前台使用了ExtJs, 其中添加和修改都通用一个窗口和表单,当用户单击窗口中的【取消】或关闭窗口时,其实窗口并没有真正关闭,而是隐藏了。
由于之前也没用过ExtJs,所以在做的时候,也是先看下别的同事是怎么做的,再说做法上统一对之后的维护也好很多,但Ricki并没有Ctrl+C/Ctrl+V,而是弄明白后,自己写代码。
正因为如此,才遇到不少问题,其中就记录在修改时,业务主键可见但不可以编辑,Ricki在打开修改窗口时,获取该表单字段,并调用disable方法,设置它不可用。但这样做的话,修改数据单击提交按钮后,这个字段的值就不会上传给服务器,所以报错,提示:Cp.xxx字段不能为NULL。
与服务端交互是使用Ext.Ajax.request的,Ricki试图设定params参数的值,如:
method:'post',(注意,如果使用params参数,method只能用post,否则params的数据也不上传)
params:{'cp.xxx':Ext.getCmp('cp.xxx').getValue}来实现该字段的上传
这个在修改记录时,没有错误,但由于之前说过添加和修改共用一个窗口,那么提交按钮理当也是共用一个handler,当添加数据时,就出现问题了,因为添加窗口,业务主键可编辑,但按提交按钮后,整个表单数据和params中的参数都会上传,而表单中已有cp.xxx,假设在添加窗口中,输入的主键值为Book,那么保存在数据库表中的该字段的值最终为xxx:Book,Book。(重复了)
最后的解决办法是,判断是更新还是添加,如果是添加,那么params赋值为{}即可。
有空,欢迎到红番薯逛逛