【问题标题】:Handling forms with many fields处理具有多个字段的表单
【发布时间】:2012-07-24 22:27:27
【问题描述】:

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

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

有人做过这样的事吗?从理论上讲,我想我可以设置一个AJAX 端点,并让每个控件传入其名称、新值和您要执行的CRUD 操作。然后端点可以根据某种映射适当地路由请求并返回产品。似乎必须有人以前解决过这个问题,我不想浪费时间重新发明轮子。

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

【问题讨论】:

    标签: ajax yii jeditable flyweight-pattern


    【解决方案1】:

    在类似的情况下,我决定使用 CActiveForm 仅用于 Yii 标准的简单验证(它可以使用 Ajax 验证),避免使用“required”属性。当然还要保持表单的逻辑结构清晰可见。

    一般来说你是对的。我手动使用 jQuery 向控制器生成 AJAX 请求(和任何其他操作),并在那里根据需要处理它们。

    因此,您可以在控制器(分析请求中的参数)和自定义 jQuery(使用组选择器)中使用 CRUD,但您几乎无法直接在 CActiveForm 中使用(这很好:压缩不一定总是优于模型的逻辑和结构)。

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

    【讨论】:

    • 还有一些具体的练习。我有几个大型表格的情况,但很相似,但只是分开。所以我创建了一个主要的CActiveForm 类及其几个后代。对于views,我创建了一个具有公共部分的partial,并将其包含在renderPartial 中。当然,javascript 函数也以类似的方式分离。
    【解决方案2】:

    昨晚睡了之后,我发现了这个帖子:

    jQuery focus/blur on form, not individual inputs

    我在客户端使用它的修改版本通过 AJAX 更新每个表单,而不是更新每个字段。每个表单在两秒钟不活动后自动提交其数据。缺点是如果他们的浏览器崩溃,客户端可能会丢失一些数据,但好处是我可以主要使用 Yii 的内置控制器操作,我不必编写很多自定义 PHP。由于我的表格很小,但数量很多,到目前为止它似乎运行良好。

    感谢 Alexander 的出色投入,并感谢 Afnan 的帮助 :)

    【讨论】:

      猜你喜欢
      • 2014-02-26
      • 2020-10-28
      • 2015-12-10
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多