2

任何人都可以查看此代码并告诉我其中有什么问题吗?我不明白为什么它会显示两次问题。

这是根据其问题类型显示问题的代码,我的意思是它将查看问题文件夹以匹配问题类型模板,然后将其与问题一起显示。这是显示调查问题的代码。

<cfoutput>
 <cfset step = 0 />
 <form class="form form-horizontal" action="#buildUrl(action='survey.savesurveyresults',querystring='surveyId=#rc.surveyid#')#" method="post">
  <input type="hidden" name="id" value="0">
  <input type="hidden" name="fksurveyid" value="#rc.surveyId#">
  <input type="hidden" name="fkquestionid" value="#rc.questions.id#"> 
  <fieldset> 
   <cfloop query="rc.questions">
    <cfset step ++ />
    <cfset answer = "" />
    <cfmodule template="../question/#rc.questions.template#/display.cfm" step="#step#" question="#rc.questions.question#" template1="#rc.questions.template#"  fkquestionid="#rc.questions.id#" answer="#answer#" required="#rc.questions.required#" result="result#step#"/>
   </cfloop>

   <div class="form-actions">
    <button type="submit" name="submit" class="btn btn-success">Submit answers</button>
   </div>  
  </fieldset>
 </form>
</cfoutput>

这是我的 display.cfm 来查看问题及其问题类型,如 truefalse 或 yes 或 no。

<cfparam name="attributes.yesno" default="false">
 <cfoutput>
  <p>#attributes.step#) #attributes.question# <cfif attributes.required EQ 1><strong>*    </strong></cfif></p>
  <div class="answers">
   <cfif attributes.yesno>
    <input type="radio" name="answer" id="answer" value="yes"<cfif attributes.answer is "yes">Checked</cfif>><label for="truefalse">Yes</label><br>
    <input type="radio" name="answer" id="answer" value="no"<cfif attributes.answer is "No">Checked</cfif>><label for="truefalse">No</label>        
   <cfelse>
    <input type="radio" name="answer" id="answer" value="true"<cfif attributes.answer is "true">Checked</cfif>><label for="truefalse">True</label><br>
    <input type="radio" name="answer" id="answer" value="False"<cfif attributes.answer is "False">Checked</cfif>><label for="truefalse">False</label> 
   </cfif>
  </div>
</cfoutput>

这是列出问题记录的查询。

<cfquery name="list">
SELECT
questions.id,
questions.question,
questions.rank,
questions.required,
questiontypes.name as questiontype,
questiontypes.template as template,
surveys.name as surveysname,
surveys.thankyoumsg as thankyoumsg
FROM questions
 INNER JOIN questiontypes ON questions.fkquestiontypeid = questiontypes.id
 INNER JOIN surveys ON questions.fksurveyid = surveys.id
WHERE questions.fksurveyid = <cfqueryparam cfsqltype="cf_sql_bigint" value="#arguments.surveyid#">
</cfquery>
4

3 回答 3

6

这是让我咬过几次的东西。我一直很重视结束标签。但这是一种会受到伤害的情况。如果您不了解 cfmodule 的行为,则很难调试。正如我上面的帖子所述,如果您关闭 cfmodule 标签,它将执行两次。这是因为它被视为与自定义标签相同。在某些情况下,您可能希望在第一次运行标签时处理它的一部分,而在它完成后处理其余部分。您可以在 cfmodule 页面的 thisTag 范围内访问 ExecutionMode。没有结束标签,它只是在 thisTag.ExecutionMode = Start 模式下运行。如果关闭它,它会在结束模式下再次运行标签。如果您没有对 cfmodule 代码中的 ExecutionMode 做任何事情,那么整个事情将再次运行。

于 2013-02-20T19:52:21.947 回答
5

使用<cfmodule>标签时,您需要记住,如果您包含结束</cfmodule>标签关闭开始标签,ColdFusion 将调用该标签两次<cfmodule ... />

cfmodule 文档页面所述:

如果您为 cfmodule 指定结束标记,ColdFusion 将调用您的自定义标记,就好像它同时具有开始和结束标记一样。有关更多信息,请参阅开发 ColdFusion 应用程序中的处理结束标记。

在开发 ColdFusion 应用程序中处理结束标签

为了避免此功能,请不要关闭您的<cfmodule>标签。

于 2013-02-20T19:02:44.930 回答
0

我明白了,我必须不要像<cfmodule />.

于 2013-02-20T18:51:43.900 回答