0

モデルごとに異なるテンプレートが必要なビューがあります。

支払いプロバイダー構成を実装していますが、支払いプロバイダーごとに異なるオプション セットが必要です。

これが私のビューコードにあるものです:

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 がロードされなかったことです。

4

1 に答える 1

0

あなたのCoffeeScript構文は私には問題ないようです。

最初の (作業中の) サンプルと他の 2 つのサンプルの違いは、最初のコード サンプルではJSTクラスが評価されるときにオブジェクトがアクセスされ、後者の 2 つのサンプルではビューがレンダリングされるときにのみアクセスされることです。

JST オブジェクトの状態が途中で変更され、レンダリング時にテンプレートが存在しなくなった可能性はありますか?

于 2012-12-18T15:58:54.513 に答える