0

Rails の Dish ページに、 Side Dishes と呼ばれる複数選択可能なChosenフィールドを持つフォームがあります。

ユーザーが別のブラウザー ウィンドウから別のサイド ディッシュを追加した場合に、サイド ディッシュの選択フィールドのオプションを (ページのリロードなしで) 自動的に更新するようにしたいと考えています。

私は選択されたウェブサイトから動的に選択された更新を調べましたが、それが私が探しているものであるかどうか、および/またはそれを正しく理解しているかどうかはわかりません。

現在、私のdishes.js.coffee見た目は次のようになっています。

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

しかし、明らかにそれではうまくいきません。私の理解では、.triggerはサイド ディッシュ リストを定期的に更新し、サイド ディッシュ テーブルから新しい追加 (または削除) を取得します。

また、料理ページのフォームは次の規則に従います。

= 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 - 私は他の SO の質問を見てきましたが、すべてを機能させることができませんでした。繰り返しますが、の目的を正しく理解しているかどうかはわかりません.trigger...

4

1 に答える 1

1

これは手動で処理する必要があります。簡単な方法はありません。ポーリングを行って変更があるかどうかを確認してからリストを再作成するか、Websockets を使用してポーリングの必要をなくすことができます。そのアプローチを取る場合に websockets を支援するサービスhttp://www.pusherapp.comがあります。

ユーザビリティの観点から、私は細心の注意を払っています。ユーザーが実際にリストを使用している間、またはすでに何かを選択している場合は、リストをリロードしたくありません。

于 2012-07-18T23:34:22.790 に答える