通过ajax

时间:2018-01-09 19:36:43

标签: ajax coldfusion coldfusion-2016

我经常使用Ajax(Jquery)来发送表单以便在ColdFusion中进行处理。我将表单发送到CFC,通过Ajax通知将结果和错误返回给用户。

表单可能非常大(想想带有额外输入的完整HTML页面),并且需要CFC中的大量逻辑才能正确处理,具体取决于表单中选择的选项。

因为CFC中的每个函数都可能很大(可能是1200行代码),所以我得到了可怕的“ 分支目标偏移太大而不能 ”错误ColdFusion的。为了解决这个问题,我已经将一些代码放入.cfm文件中并使用<cfinclude>将代码返回到cfc中,这样可以“解决”问题,但在尝试组织所有小片段以关联时我觉得很困惑与特定的CFC。它也可能是一种低效的工作方式。

我想知道其他ColdFusion用户如何使用CFC构建/处理处理表单,这些CFC在将表单数据导入数据库时​​会执行大量其他操作。

我想到的一些选项是:

  • 为其中没有太多代码的创建,更新,读取和删除操作创建“shell”函数
  • 在shell函数cfinclude中,所有代码都是通过子函数从许多其他.cfm文件中获取代码来保持代码最小化
  • OR调用其他执行子功能的CFC并将表单变量作为参数传递给它们

上面的选项最终会让我有这样的结构(我不喜欢):

Article.cfc (CreateArticle, EditArticle etc)
  CreateArticle_InsertImage.cfc
  CreateArticle_ProcessBodytext.cfc
  CreateArticle_InsertUser.cfc
  CreateArticle_CheckIfExistingArticle.cfc
  EditArticle_UpdateImage.cfc
  EditArticle_UpdateBodytext.cfc
  EditArticle_CheckIfExistingArticle.cfc

我最终会为每个函数创建一个新的CFC,而不是它们本身就是类/对象。它们可能是CFM文件(并且使用<cfinclude>但是这样做似乎很奇怪。有没有人知道的替代/更好/标准方式?

1 个答案:

答案 0 :(得分:2)

cfif/cfelseif/cfifcfswitch/cfcase的大块可能导致分支偏移错误。我们在某些情况下通过将这些语句移动到单个cfif语句来修复此问题。这严重减少了代码中的分支数量。

符:

<cfif ListFindNoCase("myString", trim(arguments.event_key)) GT 0>
   <!--- myString code --->
<cfelseif ListFindNoCase("myOtherString", trim(arguments.event_key)) GT 0>
   <!--- myOtherString code --->
</cfif>

编译:

<cfif ListFindNoCase("myString", trim(arguments.event_key)) GT 0>
   <!--- myString code --->
</cfif>
<cfif ListFindNoCase("myOtherString", trim(arguments.event_key)) GT 0>
   <!--- myOtherString code --->
</cfif>

您可以将这些条件检查移动到单独的函数中,尤其是在您最终只设置单个变量的值时。

如果您处于绑定状态,只需将代码移至include并稍后将其分解即可。单个函数中的1200行代码不算什么。我的最后一场演出的CFCs只是成堆的包括,扩展了其他成堆的包含的CFCs,每个包含可以包含20-30k行代码,其中包含包含include的函数。函数中的包含通常用于专门解决分支偏移问题。

FWIW,我在我的墙上打印出深度子对象的元数据转储作为抽象艺术。