【问题标题】:Automatically Updating Chosen field options自动更新选择的字段选项
【发布时间】:2012-07-18 22:25:13
【问题描述】:

在 Rails 中,我的 Dish 页面上有一个表单,其中有一个名为 Side Dishes 的多选 Chosen 字段。

如果用户从另一个浏览器窗口添加另一个配菜,我希望我的配菜选择字段的选项自动更新(无需重新加载页面)。

我从 Chosen 网站查看了 Updating Chosen Dynamically,但我不知道这是否是我正在寻找的内容和/或我是否理解正确。

目前,我的dishes.js.coffee 看起来像这样:

jQuery ->
  $(".chzn-side-dish").chosen()
  $(".chzn-side-dish").trigger "liszt:updated"

但显然这并不能解决问题。我的理解是.trigger 将定期刷新配菜列表并从配菜表中获取任何新添加(或删除)。

Dish 页面上的表单遵循以下约定:

= form_for @dish, :html => { :class => "form-horizontal" } do |f|
...
%fieldset
  .control-group
    =f.label :side_dish_ids, "Side Dish(es)", :class => 'control-label'
    .controls
      =f.collection_select :side_dish_ids, SideDish.order(:name), :id, :name, {}, {multiple: true, :class => 'chzn-side-dish'}

PS -- 我已经查看了other SO 的问题,但无法全部正常工作。同样,我不确定我是否正确理解了.trigger... 的用途。

【问题讨论】:

  • jQuery 的.trigger() 是一种模拟浏览器事件的编程方式,该事件通常会响应用户交互而发生,例如。 “点击”或“鼠标悬停”。它也可以与没有用户交互等效项的自定义事件一起使用。

标签: jquery ruby-on-rails forms jquery-chosen


【解决方案1】:

您需要手动处理,没有简单的方法。您可以进行轮询以检查是否有更改,然后重新创建您的列表,或者您可以使用 websockets 来避免需要轮询。如果您采用这种方法,有一个服务http://www.pusherapp.com 可以帮助您使用 websocket。

从可用性的角度来看,我会非常小心,您不希望在用户实际使用列表时重新加载列表,或者如果他们已经选择了某些内容。

【讨论】:

    猜你喜欢
    • 2017-03-15
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多