有两个模型,假设 A 和 B 具有 A hasMany B 关系。用户在创建 A 时可以关联任意数量的 B 行。应用程序允许用户使用 JQuery 动态添加和删除 B 行,更具体地说,按照此示例 - http://jsfiddle.net/mjaric/tfFLt/
一切都很好,除非保存(使用 saveAll)由于服务器端验证而失败。在这种情况下,页面在提交时刷新,所有动态添加的字段都会丢失,用户必须从头开始重新创建所有行。
有没有什么办法,使用 JQuery 动态添加的字段都不会丢失并保留其旧值(与 Cake 的默认行为相同)?可能发出 Ajax 请求是一种选择,因此页面不会在服务器端验证失败时重新加载,但对我来说这不是一种选择,因为表单也有一个文件上传,而且据我所知,Ajax 请求不支持文件 trsnafer?
最佳答案
正如所指出的,在验证失败时渲染 View 时,您可以静态地放置所有字段。
无法通过 AJAX 上传文件,因为无法从 JS 读取文件。不过,有一个完善的解决方法:您可以将表单暂时放入不可见的 iframe 中,以 native 方式提交,然后触发回调,就像 AJAX 响应一样。
jQuery form plugin非常擅长以 AJAX 方式提交表单,并且在遇到文件字段时透明地执行后者。
关于jquery - 由于某些验证而保存失败时,动态添加的表单字段会丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9587830/