Size: a a a

2021 April 23

AB

Alex Bubnov in pro.elixir
"html или json отдавать?"
источник

LL

Lama Lover in pro.elixir
Это решает контроллер
источник

AB

Alex Bubnov in pro.elixir
и неявно проставляет флаг для view
источник

LL

Lama Lover in pro.elixir
Нет, совсем нет. Контроллер (или плаг выше, или фоллбек контроллер) явно указывает (через put_view) какую вьюху рендерить
источник

AB

Alex Bubnov in pro.elixir
источник

LL

Lama Lover in pro.elixir
Ну так тут контроллер явно указывает в каком формате рендерить, это не вьюха определяет
источник

AB

Alex Bubnov in pro.elixir
даже если предположить, что :show + some magic state => "show.json" делается контроллером, вью всё равно об этом знает
источник

AB

Alex Bubnov in pro.elixir
ну то есть, я не разбирался внутри, кто именно склеивает selected content-type и вот этот action, или как это называется, но во вью это всё равно протекает
источник

LL

Lama Lover in pro.elixir
Связь вьюх и темплейтов довольно прозрачна. Ты либо темплейт рендеришь прямо в render функции, либо в одноименном темплейт-файле, что сделано чисто для разграничения html от эликсира
Функции-хэлперы тоже вполне явно передаются просто как функции того же модуля
источник

LL

Lama Lover in pro.elixir
Я обычно не протаскиваю тип контента во вьюхи, а делаю разные вьюхи

Но вьюха в любом случае знает какой тип контента она рендерит, не важно принимает ли она это в аргументах или нет, лол
источник

LL

Lama Lover in pro.elixir
Что за some magic state?
источник

AB

Alex Bubnov in pro.elixir
selected content-type, результат content negotiation
источник

LL

Lama Lover in pro.elixir
but content-type is selected in the controller
источник

LL

Lama Lover in pro.elixir
view doesn't select content type, it just renders what it's been said to render
источник

AB

Alex Bubnov in pro.elixir
хорошо, можно переформулировать в свете новых познаний - content negotiation в фениксе абсолютно ублюдочно неочевидный
источник

AB

Alex Bubnov in pro.elixir
впрочем, это наверное не только свойство феникса, и единственный способ сделать его очевидным - хз, наверное, написать его самому
источник

LL

Lama Lover in pro.elixir
Почему неочевидный-то? Как должно быть лучше?

К тебе пришёл заголовок
Ты его распарсил в плаге
Ты получил нужный тип в контроллере
Ты вызвал вьюху нужного типа (или передал нужный тип во вьюху)
источник

AB

Alex Bubnov in pro.elixir
ну или хотя бы explicit конфигурация - явно проставлять плаг после роутера, ему указывать из какого поля(qs или params) брать оверрайд
источник

LL

Lama Lover in pro.elixir
Не понял что ты имеешь в виду
источник

AB

Alex Bubnov in pro.elixir
?format=json, или какой там дефолт в фениксе
источник