プラグイン内でカスタムルートを定義し、カスタムページをレンダリングするにはどうすればよいですか?
この記事:Discourse プラグインの開発 - パート 5 - 管理画面の追加 - ドキュメント / 開発者ガイド - Discourse Metaや他のプラグインを見ましたが、うまくいきませんでした。
カスタムルートはすべてJSONデータを返しますが、私はEmberのテンプレートをレンダリングしたいのです。これに関連する知識を説明している記事はありますか?よろしくお願いします。
プラグイン内でカスタムルートを定義し、カスタムページをレンダリングするにはどうすればよいですか?
この記事:Discourse プラグインの開発 - パート 5 - 管理画面の追加 - ドキュメント / 開発者ガイド - Discourse Metaや他のプラグインを見ましたが、うまくいきませんでした。
カスタムルートはすべてJSONデータを返しますが、私はEmberのテンプレートをレンダリングしたいのです。これに関連する知識を説明している記事はありますか?よろしくお願いします。
やりたいことがそれだけなら、以下をご覧ください。
そして、以下もご覧ください。
私は現在ここで立ち往生しています。以下に具体的な手順を示します。
plugins/q/config/routes.rb ファイルでルートを定義しました。
get "/hello" => "examples#hello"
コントローラ: plugins/q/app/controllers/quectel/examples_controller.rb
def hello
render json: { hello: "world" }
end
現在、localhost:4200/q/hello にアクセスすると、JSON が返されます。
{"hello":"world"}
localhost:4200/q/hello にアクセスしたときに Ember のテンプレートをレンダリングするにはどうすればよいですか?
以前、後で読むためにブックマークしたトピックはこちらです: https://meta.discourse.org/t/creating-routes-in-discourse-and-showing-data/48827。最新かどうかはわかりませんが、まだ役に立つかもしれません。
はい、私もその投稿を読み、記載されている手順でインストールしましたが、うまくいきませんでした。「ページが存在しません」というエラーが表示されました。それで、途方に暮れています。
OK、discourse-subscriptions プラグインのコードを調査した結果、目的の効果を大体実現できました。
/q/hello にアクセスすると、カスタムテンプレートの内容が表示され、カスタムのバックエンドデータが取得されます。
以下は私の手順です。
plugins/quectel/assets/javascripts/discourse/quectel-route-map.js を新規作成export default function quectel() {
this.route("q/hello"); // ルートはデフォルトで /q/hello です
};
plugins/quectel/assets/javascripts/discourse/routes/q/hello.js を新規作成import Route from "@ember/routing/route";
import { ajax } from "discourse/lib/ajax";
export default class HelloRoute extends Route {
model() {
return ajax('/q/hello') // バックエンドインターフェースをリクエストし、データを取得
}
}
plugins/quectel/assets/javascripts/discourse/templates/q/hello.gjs を新規作成し、データをレンダリングimport QHello from '../../components/q-hello'
<template>
<h1>q-hello</h1>
{{!-- コンポーネントをレンダリング --}}
<QHello />
{{!-- モデルデータをレンダリング --}}
<div>{{@model.hello}}</div>
</template>
plugins/quectel/app/controllers/quectel/examples_controller.rb を新規作成# frozen_string_literal: true
module ::Quectel
class ExamplesController < ::ApplicationController
requires_plugin PLUGIN_NAME
def hello
render json: { hello: "hello 2333" }
end
end
end
plugins/quectel/config/routes.rb# frozen_string_literal: true
Quectel::Engine.routes.draw do
get "/hello" => "examples#hello"
end
Discourse::Application.routes.draw { mount ::Quectel::Engine, at: "q" }
/q/hello にアクセスすると、以下のように表示されます。