【问题标题】:Grails - How to modify list items from g:select dynamicallyGrails - 如何从 g:select 动态修改列表项
【发布时间】:2014-07-30 23:02:22
【问题描述】:

我有一个名为Client 的域类,具有典型属性(name, surname, 等)。

还有一个名为PaymentConditions 的类(它建立了一些参数来计算客户必须支付的金额),它引用了Client。一个Client 可以有多个PaymentConditions

最后还有一个Payment 类,其属性包括paymentDateamount 以及对ClientPaymentConditions 的引用。

当我想注册 Payment 时,我使用 Ajax 调用从进行付款的 Client(包括客户端 ID)中检索数据。但问题是,由于对PaymentConditions 的引用,有一个下拉列表,其中包含所有已注册的付款条件。我需要过滤下拉列表项以仅显示与检索到的client 相关的项。

你能帮我解决这个问题吗?

提前致谢!

已编辑:表单中有一个输入字段,用户必须在其中输入客户的姓氏。 This input field has implemented the JQuery UI autocomplete feature, so when a Client is selected the PaymentConditions drop-down list must be updated or filtered for the retrieved Client.

【问题讨论】:

  • 您如何填充PaymentConditions 列表?我会使用类似的东西:def client = Client.get(id); def paymentConditions = client.paymentConditions...
  • 我正在使用自动生成的视图代码:<g:select id="paymentCondition" name="paymentCondition.id" from="${PaymentCondition.list()}" optionKey="id" value="${paymentInstance?.paymentCondition?.id}" class="many-to-one" noSelection="['null': '']"/>。我需要在 Ajax 调用之后过滤此列表。

标签: ajax grails gsp


【解决方案1】:

为了显示下拉列表,grails 提供了一个特殊的选择标签-

<g:select name="paymentCondition"               //Name you want to send back to server
      from="${client.paymentConditions}"        //Client wise filtered conditions where client is a passed client instance
      value="${client.paymentConditions.id}"    //Selected option value to send to server
/>

或者,如果您只想在控制器中过滤列表,那么您可以这样做-

def client = Client.get(id); 
def paymentConditions = client.paymentConditions

根据您的实施使用您喜欢的方式。希望对您有所帮助。

【讨论】:

  • 它们看起来很有趣,但我认为它们不会解决我的问题。我正在使用自动生成的代码:&lt;g:select id="paymentCondition" name="paymentCondition.id" from="${PaymentCondition.list()}" optionKey="id" value="${paymentInstance?.paymentCondition?.id}" class="many-to-one" noSelection="['null': '']"/&gt;,因此在呈现创建页面后,我有一个注册了所有付款条件的列表。我需要在 Ajax 调用(检索客户端数据)完成后过滤下拉列表。
  • 好的,所以在这种情况下,您必须通过 AJAX 调用获取过滤后的列表。说明 - &lt;g:select&gt;&lt;/g:select&gt; 标签在内容交付给客户端之前在服务器上工作,并且客户端获取 html 选择标签,因此在 AJAX 调用后您无法更改它。剩下的唯一选择是在控制器中计算出您的过滤列表并使用 AJAX 发送它并使用 JavaScript 和 AJAX 的 onsuccess 方法更新列表。
  • 我认为它会起作用。但这正是我不知道该怎么做的。我已经有一个闭包来生成一个给定客户端 ID 的下拉列表:render g.select(name: "paymentCondition.id",id: "paymentCondition",from: conditions,optionKey: "id",value: "${payment?.paymentCondition?.id}",class: "many-to-one")。但它会在value 上产生错误。我的主要问题是我不知道如何用 AJAX 生成的下拉列表替换特定的下拉列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2012-09-12
相关资源
最近更新 更多