Mis rutas personalizadas están devolviendo datos JSON, pero lo que quiero es renderizar una plantilla de Ember. ¿Hay alguna publicación que explique este conocimiento? Muchas gracias.
ok, después de investigar el código de plugins/discourse-subscriptions, he implementado aproximadamente el efecto deseado.
Al acceder a /q/hello, se mostrará el contenido de la plantilla personalizada y se obtendrán los datos del backend personalizado.
A continuación se detallan mis pasos:
Crear un nuevo archivo de mapeo de rutas: plugins/quectel/assets/javascripts/discourse/quectel-route-map.js
export default function quectel() {
this.route("q/hello"); // La ruta predeterminada es /q/hello
};
Crear el archivo de ruta: 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') // Solicitar la interfaz de backend para obtener datos
}
}
Crear el archivo de plantilla frontend: plugins/quectel/assets/javascripts/discourse/templates/q/hello.gjs, para renderizar los datos
import QHello from '../../components/q-hello'
<template>
<h1>q-hello</h1>
{{!-- Renderizar componente --}}
<QHello />
{{!-- Renderizar datos del modelo --}}
<div>{{@model.hello}}</div>
</template>
Crear el archivo del controlador backend: 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
Definir la ruta del backend: 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" }
Al acceder a /q/hello, verá la siguiente visualización: