Динамический выбор шаблона 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 измениться так, чтобы шаблоны больше не присутствовали во время рендеринга?