Не удалось заменить topic-list-item.raw.hbs / topic-list-item.hbr на мобильном устройстве

Всем привет,

Я разрабатываю тему для кастомизации нескольких аспектов стандартного Discourse. С этой целью мне нужно изменить компонент topic-list-item, который, на первый взгляд, выглядит довольно просто. Я добавил в свою тему файл по пути javascripts/discourse/templates/components/topic-list-item.hbs и могу размещать там свой код. Однако именно здесь начинаются вопросы.

В компоненте для этого шаблона есть метод renderTopicListItem, который устанавливает свойство topicListItemContents, используемое для стандартного рендеринга. Проверьте:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/components/topic-list-item.hbs

Первый вопрос: ПОЧЕМУ? Зачем нам это нужно? Почему нельзя просто использовать код Handlebars как обычно?

Чтобы не вмешиваться слишком сильно в исходный код ядра, я решил оставить topic-list-item как есть, а вместо этого заменить файл topic-list-item.raw.hbs в своей теме. Это работает без проблем.

Тем не менее, я ожидал, что добавление файла javascripts/discourse/templates/mobile/list/topic-list-item.raw.hbs в мою тему заменит мобильное представление, но этого не происходит.

Метод findRawTemplate по-прежнему возвращает стандартный мобильный шаблон из Discourse, который содержит:

Даже при ручном редактировании в рамках моего локального проекта Discourse мне не удаётся обновить мобильную версию с внесёнными изменениями.

Надеюсь, объяснение понятно, и кто-то обладает знаниями в этой области. На данный момент всё выглядит сломанным, и, возможно, это стоит исправить, если оно действительно сломано (я могу это сделать, если лучше пойму, что происходит).

Пока я продолжу искать ответ самостоятельно и буду обновлять информацию о новых находках. Ниже небольшая GIF-анимация того, что у меня отображается локально.

http://g.recordit.co/AtOJlltJ8o

ОБНОВЛЕНИЕ: Я также изменил расширение raw на .hbr, так как в недавнем коммите файлы были изменены, но мне всё ещё не удаётся заставить это работать.

Я только что проверил, и у меня наблюдается та же проблема… Я вообще не могу переопределить этот шаблон. Похоже, это произошло в течение последних суток. Может ли это быть связано с переходом на hbr, @markvanlan?

Когда я создавал эту тему, моя локальная версия Discourse была от 17 января, если я не ошибаюсь. Скажу сразу: у меня возникла проблема с этой версией, и после обновления до последних изменений и переименования файла с raw.hbs в hbr проблема осталась той же.

На данный момент я кастомизировал шаблон в javascripts/discourse/templates/components/topic-list-item.hbs, но в идеале сырые шаблоны должны вести себя так же, как и остальные шаблоны (с точки зрения подстановки и кастомизации).

@awesomerobot если вы проверите коммит непосредственно перед изменением hbr, всё будет работать?

Ага, спасибо за дату, @duranmla… это уже немного старая проблема, @markvanlan, сейчас разбираюсь

К сведению: я не наблюдал влияния этой проблемы на Topic List Previews (legacy), который переопределяет сырой шаблон элемента списка тем для мобильных устройств. https://github.com/paviliondev/discourse-topic-previews/tree/master/assets/javascripts/discourse/templates/mobile/list Однако я тестировал это только в сценарии с успешным прохождением тестов.

Хорошо, у меня возникли небольшие трудности с поиском проблемы, так как после отката мне пришлось удалить, а затем снова применить кастомизацию, чтобы воспроизвести её.

Думаю, дело на самом деле в коммите hbr от @markvanlan (DEV: Use .hbr for raw template file extension (#8883) · discourse/discourse@3e89774 · GitHub), извините за колебания.

Для теста я добавил следующее в секцию <head> текущей темы через раздел кастомизации в панели администратора:

<script type='text/x-handlebars' data-template-name='mobile/list/topic-list-item.raw'>
  test
</script>

До этого коммита всё работало отлично, но как только я применил этот коммит и затем снова применил кастомизацию, шаблон был проигнорирован.

Возможно, я всё-таки запутался, мне казалось, что это было раньше. В любом случае я буду следить за этой темой. Спасибо за быстрый ответ и помощь в выяснении этого вопроса @awesomerobot

Исправление уже доступно, если вы обновите последнюю версию.

Марк проведёт дополнительную работу, чтобы выяснить, почему тесты проходили, несмотря на эту ошибку.

Тем не менее, я обновил, и ошибка сохраняется при работе со структурой темы проекта (что, вероятно, наиболее часто используется для проектов среднего и большого масштаба). Я оставлю здесь видео, где я демонстрирую ошибку: https://www.loom.com/share/d3f437347c8f4d5aa4dd1c7ce08e1bf9

P.S.: Я оставлю видео доступным некоторое время, на случай если оно поможет кому-то понять проблему и воспроизвести её. Через несколько недель мне придётся удалить видео :grimacing:

ПРИМЕЧАНИЕ: Я также попробовал переименовать файл обратно в topic-list-item.raw.hbs вместо topic-list-item.hbr, но проблема осталась той же.

У меня это работает с директорией javascripts (с любым из расширений — старым или новым).

Одна вещь, с которой я столкнулся昨晚: возможно, вам потребуется отредактировать файл и сохранить его, либо удалить файл и добавить его заново (шаблоны компилируются при сохранении, поэтому возможно, что вы временно застряли в состоянии с ошибкой.).