0

我无法弄清楚如何遍历 questionTypes 并获取选定的 questionType 值。根据所选的 questionType,我必须为多选项问题添加答案,例如在选择正确答案时,我们提供了四个选项,我们必须从中选择一个作为正确答案。

我曾尝试使用cfswitch,但似乎不起作用:

<html>
  <head> <script src="http://code.jquery.com/jquery-latest.js"></script></head>
<body>
<cfoutput>


    <cfif not IsDefined('rc.questionType')>
        <form class="form form-horizontal" action="#buildUrl('question.new')#" method="post">
            <input type="hidden" name="surveyId" value="#rc.surveyId#">
                <fieldset>

                <div class="control-group">
                <label class="control-label" for="questiontype">Question type</label>
                    <div class="controls">
                    <select name="questionType" onchange="this.form.submit()">
                        <option value="0" >Select question type</option>
                    <cfloop query="rc.types">
                        <option value="#id#">#name#</option>
                    </cfloop> 
                    </select>
                    </div>
                </div> 
                </fieldset>
        </form> 

    <!--- if question type is defined, display question form --->
    <cfelse>
        <form class="form form-horizontal" action="#buildUrl('question.save')#" method="post">
            <input type="hidden" name="id" value="0">
            <input type="hidden" name="surveyId" value="#rc.data.fksurveyId#">
            <input type="hidden" name="questionTypeId" value="#rc.data.fkquestionTypeId#">
            <input type="hidden" name="rank" value="#rc.data.rank#">



            <fieldset>

            <div class="control-group">
            <label class="control-label" for="question">Question</label>
                <div class="controls">
                    <input class="input-xxlarge" type="text" name="question" id="question" required="true" placeholder="write your question">
                </div>
            </div>

            <div class="control-group">
            <label class="control-label" for="Required">Required</label>
                <div class="controls">
                <select name="Required">
                    <option value="1" selected>Yes</option>
                    <option value="0">No</option>
                </select>
                </div>
            </div>                 



            <!--- question arguments for selected type, this will be for multioption questions --->

           <!--- <cfif rc.questiontype is "multiple choice (single selection),Multiple Choice (Multi Selection) with Other,Multiple Choice (Single Selection) with Other,Multiple Choice (Multi Selection)"> --->
           <cfswitch expression="#rc.questiontypeid#">
                <cfcase value="multiple choice (single selection),Multiple Choice (Multi Selection) with Other,Multiple Choice (Single Selection) with Other,Multiple Choice (Multi Selection)">
                 <div class="control-group">
                    <label class="control-label" for="answer">Answer</label>
                      <div class="controls">
                         <input class="input-xxlarge" type="text" name="new_answer" id="new_answer">
                      </div>
                </div>

               <div class="control-group">
                   <label class="control-label" for="rank">rank</label>
                      <div class="controls">
                         <input class="input-mini" type="text" name="rank" id="rank">
                     </div>
               </div>


                <div class="control-group">
                    <label class="control-label" for="answer">Answer</label>
                      <div class="controls">
                         <input class="input-xxlarge" type="text" name="new_answer" id="new_answer">
                      </div>
                </div>

               <div class="control-group">
                   <label class="control-label" for="rank">rank</label>
                      <div class="controls">
                         <input class="input-mini" type="text" name="rank" id="rank">
                     </div>
               </div>
          </cfcase>
        </cfswitch>




            <!---  --->
            <div class="form-actions">
                <button type="submit" class="btn btn-primary">Save</button>
                <a href="#buildUrl(action='admin:question.list', querystring='surveyid=#rc.surveyId#')#" class="btn">Cancel</a>
            </div>
            </fieldset>
        </form> 
    </cfif>
<cfdump var="#rc#">

</cfoutput>
</body>
</html>

这是我添加新问题的控制器方法:

<cffunction name="new" returntype="void" access="public">
        <cfargument name="rc" type="struct" required="true">
        <!---call service to get the textfields, checkboxes etc,. based on questiontype selection --->
        <!--- call service to get question types for select box --->
        <cfset rc.types = getQuestionService().types()> 
        <cfset rc.action = 'New Question'>
        <!--- if user select question type --->
        <cfif isdefined('arguments.rc.questionType')>
            <cfset rc.data = getQuestionService().new(arguments.rc.surveyId, arguments.rc.questionType)>
        </cfif> 
    </cffunction>

我在单页中有两个表格。在第一种形式中,我选择 questionType。根据所选的 questionType,我必须显示一个添加问题表单。

4

2 回答 2

1

为了确保我正在阅读这段代码应该如何工作:

1. 这是一个创建问题的表格,而不是回答它。
2. rc 是一个以您的基本问题定义为键的结构,并且您还有其他现有代码可确保 rc 结构将存在于此页面上。
(而不是 isDefined("rc.questionType") 我会使用 structKeyExists(rc, "questionType"),但这是一个完全不同的讨论
。3. 当您更改问题类型的值时,该字段将被提交回来,其他代码创建并填充 rc 结构的 questionType 键。所以 isDefined('rc.questionType') 现在应该为 TRUE(将您移动到 ​​cfelse 块)。
4. 您现在返回到带有输入问题的字段的同一页面,无论是否需要,您正在寻找基于 questionType 的答案输入框。

如果所有这些假设都是正确的,那么这就是您需要遍历选项以获得答案的关键。cfswitch/cfcase 是正确的,但其中一些多项选择选项的处理方式需要稍有不同。带有“其他”选项的选项在此端和答案跟踪端将需要更多处理。您必须为该已检查答案添加一个文本框。

因此,您需要对 rc 结构中的问题进行更多定义。您需要跟踪哪个是正确答案(一个简单的复选框)。如果您想允许动态数量的多项选择答案,则需要跟踪您需要多少答案。如果您跟踪答案是否为“其他”,您甚至可以将这些多选答案选项放在一起。这也将允许您在多选选项中有多个“其他”类型的选择。当然,这会将您对这是否是一个多项选择题的选择减少到只有一个,只是“多项选择”。让答案确定它是单选还是“其他”选择。如果您想使用单选按钮而不是复选框来进行单选,那么您就可以 d 必须做的是计算问题的答案。然后,您可以分别担心每个基本问题类型。

更好地跟踪答案(正确和“其他”选项)的代码也需要被拉回,可能在 getQuestionService() 函数中,我假设你正在提取你的问题定义并填充 rc结构。

您是否打算将此表格用作 UPSERT,或者这只是一个 INSERT,您将在其他地方更新/编辑问题?

无论如何,回到你原来的问题。我建议的第一件事是在页面顶部也 cfdump rc 结构。查看您最初使用的数据。

在您需要添加答案的地方,cfswitch 是正确的方法。您可能与此处的任何案例都不匹配。在此处输出 rc.questionTypeID 以查看您的值是多少。我会为问题类型使用整数 ID,而不是问题类型的名称。它将提供更快、更精确的处理。当你得到正确的案例时,你需要在这里循环你的答案。

要选择哪个是正确的,只需在 cfif 中添加 selected="selected" 或 checked="checked"(取决于输入类型),以检查当前答案是否为正确答案。

于 2013-02-26T21:07:07.590 回答
0

由于 switch 表达式设置为rc.questiontypeid,因此 case 值应该是 possible rc.questiontypeid,而不是问题类型名称。

于 2013-02-26T19:50:39.340 回答