Estoy trabajando en mi primer plugin y quiero poder obtener el contenido de texto de un cuadro de texto en el panel de administración (parte del plugin) después de presionar un botón. Luego, quiero hacer algunas cosas con el contenido en Ruby. ¿Hay alguna forma de que el frontend de Ember envíe datos al backend de Ruby?
Mi 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
Mi assets/javascripts/discourse/templates/admin/plugin-sample-plugin.hbs:
¿O sería más ideal una configuración? Sin embargo, mi caso de uso es que el cuadro de texto no necesitará conservar los valores cada vez. ¿El yml proporciona esta funcionalidad? ¿Puedo cambiar la configuración del sitio a través de Ruby?
Parece que lo que buscas es crear una API en Ruby a la que pueda llamar el JS. Un ejemplo es el plugin Data Explorer, que implementa una API de entrada de usuario con un ámbito de permiso de administrador en el lado de Ruby.
El JS del explorador de datos es bastante completo, así que solo daré un ejemplo simplificado de lo que probablemente necesitarías.
import { ajax } from "discourse/lib/ajax";
...
@action
sendTextboxData() {
ajax("/endpoint", {
type: "POST",
data: {
key: "value"
},
}).then((result) => {
// haz algo con el resultado
};
}
Puedes hacer lo mismo con un fetch() nativo de JS, pero parece que la función ajax() que proporciona Discourse maneja algunas cosas menores internamente.
Si tu código Ruby es lo suficientemente ligero, probablemente puedas incluirlo completamente en un solo archivo para el controlador. De lo contrario, puedes organizarlo como necesites.