Динамический выбор шаблона JST с магистралью

У меня есть мнение, что нужны разные шаблоны для разных моделей.

Я внедряю конфигурацию провайдера платежей, и для разных провайдеров платежей требуется разный набор опций.

Вот то, что я теперь имею в своем коде представления:

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())

Но я не могу понять, как правильно это написать.

Обновить

Последнее действительно правильно, уловка заключалась в том, что @model не был загружен при вызове render.

1 ответ

Решение

Ваш синтаксис CoffeeScript мне кажется нормальным.

Разница между вашим первым (рабочим) образцом и двумя другими состоит в том, что в первом примере кода JST К объекту обращаются, когда оценивается ваш класс, и в двух последних примерах только при визуализации представления.

Может ли состояние объекта JST измениться так, чтобы шаблоны больше не присутствовали во время рендеринга?

Другие вопросы по тегам