【问题标题】:How to display a message box in view from controller?如何从控制器的视图中显示消息框?
【发布时间】:2011-09-07 01:25:53
【问题描述】:

用户在表单上输入一些数字和其他数据后,就会计算出总数。用户还可以选择输入折扣金额。我使用 jQuery AJAX 方法将所有数据发送到 Load 控制器中的 getTotal 方法。如果用户输入的折扣金额大于计算的总金额,我希望弹出一个消息框(类似于 JavaScript alert 框),说明折扣必须小于总金额。有没有什么干净的方法可以从控制器中做到这一点?

【问题讨论】:

    标签: javascript jquery grails groovy grails-orm


    【解决方案1】:

    没有。您希望在 ajax 响应中返回一个结果,告诉客户端显示您的消息框。然后你可能会使用 JavaScript 来展示它。有很多用于显示消息框的 jQuery 插件。例如:jQueryUI's Dialog

    【讨论】:

    • 现在我的控制器使用render 在文本字段中呈现总数,然后通过 AJAX 将其作为 HTML 发送回。如何在同一个 AJAX 调用中呈现总数并呈现消息?
    • 您需要返回一组不同的数据。例如,一些包含数据的 JSON 和显示消息框的内容。使用 JavaScript 更新文本字段,而不是发送整个 HTML。
    【解决方案2】:

    这就是我所做的。在我看来,我的一种 JavaScript 方法中有以下代码。我使用 jQuery 的 getJSON 而不是 ajax,因为它似乎更适合(更干净)。

    $.getJSON(
      "/truckingmanagement/load/getTotal",
      {cargoSource:cargoSource, cargo:cargo, haulRate:haulRate, tonnage:tonnage, mileage:mileage, discount:discount, taxExempt:taxExempt},
      function(result) {
        if(result.message != null){
          alert(result.message);
          $("#discount").val("");
          $("#totalCell").html(result.total);
        }
        else{
          $("#totalCell").html(result.total);
        }
      });
    

    我的控制器我仍然在我的闭包中使用 render 方法,但将其修改为 JSON,确保为 import grails.converters.*

    render(contentType:"text/json") {
        total = g.textField(name: 'total', value: totalBill, readonly: 'readonly')
        message = errorMessage
    }
    

    totalBill 值是在调用 render 之前计算出来的,errorMessage 只是一个字符串,其中包含基于错误(负折扣值或折扣值大于总计)或没有消息的消息一点也不。因此,如果消息是null,则不会显示任何消息。

    【讨论】:

      【解决方案3】:

      我认为让您的控制器生成 javasacript 作为对 ajax 调用的响应在技术上是可行的,但这样做是一种非常丑陋的方式。

      更好的是发送 JSON。比如:

      result = []
      result.success = total >= discount
      result.total = total
      render result as JSON
      

      并且在 Ajax 调用中,检查是否成功,如果成功则显示总数,如果不成功则显示消息。

      【讨论】:

        最近更新 更多