2

パーシャルでレンダリングされるドロップダウンのリストを返すコントローラーメソッドがありますが、パーシャルが使用されている場所に応じて、RJSテンプレートを変える必要があります。どのRJSを使用するかを決定するパラメーターをコントローラーに渡すことはできますか?

これがコントローラーメソッドです。非常に簡単です。

def services
   respond_to do |format|
     format.js {
       @type     = HospitalCriteria.find_by_id(params[:type_id])
       @services = @type.children.all
     }
   end
end

そして、これが自動的にレンダリングされるrjsテンプレートです

page.replace_html 'select_service', :partial => 'hospital/services'
page.replace_html 'select_condition', :partial => 'hospital/conditions'
page.replace_html 'select_procedure', :partial => 'hospital/procedures'

page << 'if ($("chosenType") != null) {'
  page.replace_html 'chosenType', @type.name
  page.replace_html 'chosenService', 'Selected Service'
  page.replace_html 'chosenCondition', 'Selected Condition'
  page.replace_html 'chosenProcedure', 'Selected Procedure'
page << '}'
4

4 に答える 4

3

私はマイクの反応が好きですが、デザインの観点からここで考えるべきことがあります:

これはビューレイヤーにあるように思えます-アクションが意味的に同じであるが、プレゼンテーションが異なる場合、おそらく2つの異なるrjsパーシャルを持ち、以下のようなことをする方がMVCに準拠していますか?

if params[:use_alternate]
  render :partial => "case_1.rjs"
else
  render :partial => "case_2.rjs"
end
于 2008-10-10T20:24:05.877 に答える
2

条件付きロジックを1 つのrjs テンプレートに配置するのはどうですか?

# services.rjs

if @type == "your conditions"
  # your rjs updates
else
  # your other rjs updates
end

これにより、よりクリーンなコントローラーが得られ、複数の rjs テンプレートを維持するという頭痛の種から解放されます。

于 2008-10-13T09:27:56.103 に答える
1

何かのようなもの:

if params[:use_alternate]
  render :template => alternate.rjs and return
end
于 2008-10-10T20:03:55.933 に答える
0

物事をきれいに保つために、2 つの異なる RJS をレンダリングする 2 つのコントローラー メソッドを用意します。次に、2 つのコントローラー メソッドが呼び出す共通の保護メソッドに @type と @services を設定します。

私の考えでは、ケースごとに異なるものを求めているので、別のコントローラーメソッドを呼び出します。メソッドの動作方法を変更するためにフラグを渡すことは単なるハックであり、3 つ、4 つ、または 5 つの場所がある場合は適切にスケーリングされません。より多くのコードを生成しますが、保守はより簡単になります。

于 2008-10-10T22:12:59.137 に答える