所有的 DisplayObject 都必须直接添加到页面中,因此除非您将 myaction.cfm 也添加到页面中,否则将永远找不到它。
如果您真的需要,您可以使用以下方法获取到插件中文件的映射:
<cfinclude template="/#$.getPlugin('MyPluginPackageName').getDirectory()#/...">
通常,您可以将 $.getPlugin('MyPluginPackageName') 分配给 DisplayObject 开头的对象变量,以便您可以重复使用它而无需重复调用该函数。
但是,这不是在 Mura 插件中映射“视图”文件的最佳做法。
更推荐的方法是让同一个 DisplayObject 显示表单并处理表单结果。您可以将表单包装在一个条件中,例如:
<cfif StructKeyExists(form,"some_field_in_my_form")>
... action code
<cfelse>
... form code
</cfif>
...确定表单是否已提交(如果您正在执行服务器端验证等,显然会进行调整)。我要推荐的一件事是不要使用 StructCount("form") 或类似的,因为页面上可能已经提交了其他表单。
如果您想分离代码以使其更有条理,只需将 DisplayObject 用作容器并使用包含/函数调用/等。
Display Object: [your plugin folder]/displayObjects/myform.cfm
<cfif StructKeyExists(form,"some_field_in_my_form")>
<cfinclude template="./inc/myaction.cfm"> <!--- [your plugin folder]/displayObjects/inc/myaction.cfm --->
<cfelse>
<cfinclude template="./inc/myinput.cfm"> <!--- [your plugin folder]/displayObjects/inc/myinput.cfm --->
</cfif>
如果您确实确定要拥有两个显示对象,则必须 a) 将它们都分配给同一个 Mura 内容页面,但用条件包装它们以确保它们仅出现在正确的上下文中,或者 b) 将它们分配给不同的 Mura 页面,并让您的表单发布指向包含 myaction.cfm 显示对象的 Mura 页面。
最后,我建议在https://github.com/blueriver/MuraFW1上查看 FW/1 示例插件……一旦你掌握了 FW/1(最容易学习的 CFML 框架),它就会构建您的插件要容易得多。