0

当在选择框中选择讲师时,我想要一个列出讲师(来自会话variable:session.eligibleInstructor.FULLNAME)的选择框,以使用选定的讲师电子邮件地址更新文本字段(该电子邮件也可在同一会话变量session.eligibleInstructor.EMAIL中使用:)。我知道我的 javascript 正在捕获选定的讲师(因为我做了一个“警报”):

$('#inst2Select').change(function(event){
  $('#emailInst2').load('/edu.wit.nonac/nonAcadCourse/create/updateSelect',
    {
      selectedInst: $(event.target).val()
    },
    function() {alert($(event.target).val())
}

但我的控制器操作(updateSelect)没有做任何事情:

def updateSelect = {
        //nonacCourseConsole3.url.root = "/edu.wit.nonac" + "/";
        println("UpdateSelect reached")
        def ctx = startAsync()

        ctx.start{
        println("Params: "  + params.any())
        def selectedInstEmail = dbConnection.firstRow("select EMAIL from  zV_eligibleInstructors where FIRSTNAME=?", [params.selectedInst])
        println(selectedInstEmail)
        render selectedInstEmail

        }


    }

我已经尝试了多个 ajax 类型的回调,甚至是“onchange”事件中的 remoteFunction。我意识到我不应该返回数据库来获取选定的讲师电子邮件,因为它已经在会话变量中可用。我查看了数百个网页来寻找答案,但似乎没有一个完全涉及这个确切的问题。即使我可以让控制器动作触发,那将是向前迈出的一大步。有没有人建议什么是错的?

4

1 回答 1

0

您可以让您的视图生成一个 Javascript 对象结构,其中包含教师的全名和他们的电子邮件地址。在您的控制器中,您可以构建一个讲师地图,将讲师的全名映射到他们的电子邮件地址。然后在您看来,您可以拥有类似的东西

<script type="text/javascript">
  var instructors = {
    <g:each in="${instructorMap}" var="mapEntry">
      "${mapEntry.key}": "${mapEntry.value}",
    </g:each>
  }
</script>

然后在您的更改事件处理程序中,您可以从讲师变量中提取值。

仅当您可以保证全名是唯一的时,这才有效。如果没有,您可以设置类似的两个变量instructorNames(将id 映射到全名)和instructorEmails(将id 映射到电子邮件)。

于 2013-01-25T21:43:53.200 回答