I percorsi personalizzati restituiscono dati JSON, ma io voglio renderizzare un template Ember. C’è qualche thread che spiega questa conoscenza? Grazie mille.
Ho salvato questo argomento tra i preferiti tempo fa per leggerlo più tardi: Creating Routes in Discourse and Showing Data. Non sono sicuro che sia aggiornato, ma forse può ancora essere d’aiuto.
ok, ho realizzato l’effetto desiderato studiando il codice di plugins/discourse-subscriptions.
Accedendo a /q/hello, viene visualizzato il contenuto del modello personalizzato e vengono recuperati i dati del backend personalizzato.
Di seguito sono riportati i passaggi:
Crea un nuovo file di mappatura del percorso plugins/quectel/assets/javascripts/discourse/quectel-route-map.js
export default function quectel() {
this.route("q/hello"); // Il percorso predefinito è /q/hello
};
Crea un nuovo file di percorso 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') // Richiama l'interfaccia backend per ottenere i dati
}
}
Crea un nuovo file di modello frontend plugins/quectel/assets/javascripts/discourse/templates/q/hello.gjs, per renderizzare i dati
import QHello from '../../components/q-hello'
<template>
<h1>q-hello</h1>
{{!-- Renderizza il componente --}}
<QHello />
{{!-- Renderizza i dati del modello --}}
<div>{{@model.hello}}</div>
</template>
Crea un nuovo file del controller 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
Definisci il percorso 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" }
Accedendo a /q/hello, vedrai la seguente visualizzazione: