ルートテンプレートに`.gjs`を使用できますか?

アプリに新しいルートを追加するのは非常にわかりにくいことがわかりました。他の人のためにここに記録しておきます。

ルートに /print を追加したかったのです。

  • このチュートリアルでは、/admin ルートを追加する方法を説明していますが、通常のルートについては説明していません。
  • ここには、ルートに API エンドポイントを追加する方法に関する情報があります(Ember ルートではありません)。
  • ここには、トップレベルの Ember ルートのトラブルシューティングに関する長い議論があります。

最終的に機能したコードは次のとおりです。county-fence は私のプラグイン名なので、ご自身の名前に置き換えてください。

Ember ルート

assets/javascripts/discourse/routes/county-fence-route-map.js.es6

export default function() {
  this.route('print', { path: '/print' });
}

assets/javascripts/discourse/routes/print.js

import Route from "@ember/routing/route";

export default class PrintRoute extends Route {
  model() {
    return { message: "This is a custom print page!" };
  }
}

assets/javascripts/discourse/templates/print.gjs

import RouteTemplate from "ember-route-template';
import ...;

export default RouteTemplate(
  <template>
    ...
  </template>
)

API ルート

plugin.rb

after_initialize do
  require_relative "app/controllers/print_controller"
end

app/controllers/print_controller.rb

# frozen_string_literal: true
# HTTP Status codes: https://github.com/discourse/discourse/blob/main/lib/discourse.rb

class ::CountyFence::PrintController < ::ApplicationController
  requires_plugin CountyFence::PLUGIN_NAME


  def save_print
  end

  def list_prints
    render json: { name: "donut", description: "delicious!" }
  end

  def get_print
  end

end

Discourse::Application.routes.append do
  post "/print" => "county_fence/print#save_print"
  get "/print" => "county_fence/print#list_prints"
  get "/print/:id" => "county_fence/print#get_print"
end
「いいね!」 4