2012-07-24 81 views
1

我有一个非常large webform这是我的Yii Web应用程序的中心。 表单实际上由多个html表单元素组成,其中很多都是根据需要通过AJAX加载的。处理与许多领域的表格

由于表单的大小和复杂性,有多个保存或提交按钮是不可行的。我宁愿更新数据库中的每个字段,因为它是通过异步编辑的方式使用可jeditable或类似jeditable的功能将新值添加到服务器。

有没有人做过类似的事情?理论上,我认为我可以设置一个端点,并让每个控制都通过它的名称,新值以及您想要执行的操作CRUD。然后端点可以根据某种地图适当地路由请求并返回产品。这似乎有人必须以前解决过这个问题,我不想浪费时间重新发明轮子。

感谢您的时间,感谢您对架构/实现的想法。

回答

1

在类似的情况下,我决定仅使用CActiveForm来简化Yii standarts(它可以使用Ajax验证)验证,避免使用“required”属性。当然,要保持好形式的逻辑结构。

平常你是对的。我手动使用jQuery为控制器生成AJAX请求(以及其他任何操作),并在需要时处理它们。因此你可以在控制器(分析请求中的参数)和你自定义的jQuery(使用组选择器)中使用CRUD,但你很难直接使用CActiveForm(这很好:压缩不能总是击败逻辑和模型的结构)。

在PHP中使用JavaScript的任何复合解决方案都会影响您的非平凡应用程序的灵活性。

+0

还有一些具体的做法。我遇到了几种大型形式的情况,而非仅仅是分开。所以我创建了一个主要的'CActiveForm'类和它的几个后代。对于'views'我创建了一个具有公共部分的'partial',并将其包含在'renderPartial'中。当然,JavaScript函数是以相似的方式分开的。 – 2012-07-25 06:29:05

0

昨晚睡它之后,我发现这个职位:

jQuery focus/blur on form, not individual inputs

我使用的这个修改后的版本在客户端更新通过AJAX每种形式,而不是更新的每个字段。每个表单在两秒钟不活动后自动提交数据。缺点是如果客户端浏览器崩溃,客户端可能会丢失一些数据,但好处是我可以使用Yii的内置控制器操作,而且我不必编写大量自定义PHP。由于我的表格很小,但其中有很多,所以目前看起来效果很好。

感谢亚历山大对你的出色投入,并感谢Afnan的帮助:)