Grails - 使用渲染g.select的控制器替换下拉列表

时间:2014-08-08 22:09:43

标签: jquery ajax grails

我有这些域类:

class Client {
    String name
    Date birthDate
    BigInteger accountNumber
    ...
}

class PaymentCondition {
    Client client

    String conditionName
    BigDecimal discountPercentage
    ...
}

class Payment {
    Client client
    PaymentCondition paymentCondition

    BigDecimal grossIncome
    BigDecimal totalDiscount
    BigDecimal netIncome
    ...
}

对于这些类,有自动生成的控制器和视图。当我想注册付款时,我必须选择一个客户端或输入客户的帐号(此输入字段正在实现JQuery UI自动完成功能,因此显示了根据输入的数字显示所有事件的列表)并通过AJAX调用检索其数据。问题是PaymentCondition下拉列表必须更新或替换为包含与所选客户相关的付款条件的列表。

请帮帮我。

提前致谢。

1 个答案:

答案 0 :(得分:0)

在您的控制器(通过AJAX调用)中,创建一个处理AJAX帖子的方法。请注意,参数名称number将需要在稍后的$.post调用的第二个参数中匹配参数的名称:

def updateAccountNumber(String number) {
    render text: g.select(id: 'accountNumberSelect', name: 'accountNumber', from: Account.findAllByNumber(number), optionKey: "id", optionValue: "someProperty")
}

在GSP中,添加一些javascript以将监听器附加到其中一个下拉列表中:

<r:script>
$("#clientSelect").change(function() {
    var clientNumber = $(this).val();
    $.post("${g.createLink(action: 'updateAccountNumber')}", {number: clientNumber}, function(result) {
        $("#accountNumberSelect").replaceWith(result);
    }); 
});
</r:script>