モデルごとに異なるテンプレートが必要なビューがあります。
支払いプロバイダー構成を実装していますが、支払いプロバイダーごとに異なるオプション セットが必要です。
これが私のビューコードにあるものです:
robokassa: JST["payment_providers/robokassa"]
cash: JST["payment_providers/cash"]
render: =>
template_name = @model.get('name')
switch template_name
when "robokassa" then $(@el).html(@robokassa(payment_provider: @model))
when "cash" then $(@el).html(@cash(payment_provider: @model))
動作しますが、醜いです。
私はこのようなことを試しましたが、単純なユースケースを除いて JST オブジェクトの使用方法に関する決定的なマニュアルを見つけることができません:
render: =>
template_name = @model.get('name')
$(@el).html(JST["payment_providers/#{template_name}"](payment_provider: @model)
これは、関数ではないというエラーを返します。
理想的には、ソリューションは次のようになります
template: =>
JST["payment_providers/#{@model.get('name')}"](payment_provider: @model)
...
render: =>
$(@el).html(@template())
しかし、私はそれを正しく書く方法を理解できません。
アップデート
後者は確かに正しいです。落とし穴は、render が呼び出されたときに @model がロードされなかったことです。