duranmla
(Alexis Duran)
1
こんにちは皆さん、
デフォルトの 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
更新: 最近のコミットでファイル拡張子が .hbr に変更されたため、raw を .hbr に更新しましたが、依然として動作しません。
さっそく試してみたところ、同じ問題が発生していました…そのテンプレートは完全に上書きできません。ここ1〜2日の間に発生したようです。hbr への切り替えに関連している可能性はありますか? @markvanlan
duranmla
(Alexis Duran)
3
このトピックを作成した際、私のローカルの Discourse は1月17日版だったと記憶しています。そのバージョンで問題が発生し、最新の更新を適用して raw.hbs から hbr に名前を変更しても、同じ問題が解決していません。
現時点で私が行ったのは、javascripts/discourse/templates/components/topic-list-item.hbs をカスタマイズすることです。理想的には、raw テンプレートも他のテンプレートと同様に動作するべきです(置換やカスタマイズの観点から)。
@awesomerobot hbr の変更の直前のコミットをチェックアウトすると、動作しますか?
ああ、ありがとう、@duranmla。日付を。@markvanlan、ちょっと古い問題ですね。今、追跡しています。
はい、少し特定に手間取りました。元に戻した後、問題を再現させるためにカスタマイズを一度削除してから再適用する必要があったからです。
実際には、この 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>
このコミットの前では正常に動作しますが、そのコミットを適用してからカスタマイズを再適用すると、テンプレートが無視されてしまいます。
duranmla
(Alexis Duran)
8
もしかしたら私が勘違いしていたのかもしれません。それより古いものだと思っていました。
いずれにせよ、このスレッドはフォローしておきます。迅速に調査してくださった @awesomerobot さん、ありがとうございます。
最新のコードをプルすれば修正されています
Mark は、この不具合があるにもかかわらずテストが通っていた理由を特定するために、追加の作業を行う予定です。
duranmla
(Alexis Duran)
10
それでも更新しましたが、エラーはテーマのプロジェクト構造で作業している場合に発生したままです(おそらく中規模から大規模プロジェクトで最も一般的に使用される構造です)。エラーを示す動画をこちらに共有します:https://www.loom.com/share/d3f437347c8f4d5aa4dd1c7ce08e1bf9
追記:問題の理解と再現に役立つ方のために、動画をしばらく公開しておきますが、数週間後に削除する必要があります 
注:topic-list-item.hbr から topic-list-item.raw.hbs に再度名前を変更して試しましたが、問題は同じです。
私の環境では、javascripts ディレクトリ(古い拡張子でも新しい拡張子でも)で動作しています。
昨夜遭遇した一点ですが、ファイルを編集して保存するか、ファイルを削除して再度追加する必要があるかもしれません(テンプレートは保存時にコンパイルされるため、一時的にバグのある状態に留まっている可能性があります)。