Je travaille sur mon premier plugin et je souhaite pouvoir récupérer le contenu textuel d’une zone de texte dans le panneau d’administration (qui fait partie du plugin) après avoir appuyé sur un bouton. Ensuite, je veux faire des choses avec le contenu en Ruby. Existe-t-il un moyen pour le frontend Ember d’envoyer des données au backend Ruby ?
Mon plugin.rb :
# name: Discourse Sample Plugin
# about: A simple plugin to play around with
# version: 1.0.0
# authors: NateDhaliwal
# url: https://google.com
enabled_site_setting :plugin_enabled
add_admin_route 'sample_page.title', 'sample-page'
Discourse::Application.routes.append do
get '/admin/plugins/sample-page' => 'admin/plugins#index', constraints: StaffConstraint.new
end
import Controller from "@ember/controller";
import { action } from "@ember/object";
export default class AdminPluginsSamplePlugin extends Controller {
@action
sendTextboxData() {
// Comment envoyer les données ?
}
}
Si je parviens à envoyer les données au backend Ruby, où dois-je placer la logique de traitement des données ? Dans plugin.rb ? Ou dans un autre fichier ?
Ou un paramètre serait-il plus idéal ? Cependant, mon cas d’utilisation est que la zone de texte n’aura pas besoin de conserver les valeurs à chaque fois. Le YML offre-t-il cette fonctionnalité ? Puis-je modifier les paramètres du site via Ruby ?
Il semble que vous cherchiez à créer une API en Ruby que le JS puisse appeler. Un exemple est le plugin Data Explorer, qui implémente une API d’entrée utilisateur avec une portée d’autorisation d’administrateur côté Ruby.
Le JS pour le Data Explorer est assez conséquent, je vais donc vous donner un exemple simplifié de ce dont vous auriez probablement besoin.
import { ajax } from "discourse/lib/ajax";
...
@action
sendTextboxData() {
ajax("/endpoint", {
type: "POST",
data: {
key: "value"
},
}).then((result) => {
// faire quelque chose avec le résultat
};
}
Vous pouvez faire la même chose avec un fetch() JS natif, mais il semble que la fonction ajax() fournie par Discourse gère quelques petites choses en arrière-plan.
Si votre code Ruby est suffisamment léger, vous pouvez probablement le faire tenir entièrement dans un seul fichier pour le contrôleur. Sinon, vous pouvez l’organiser comme vous le souhaitez.