Estou escrevendo um plugin para estender a funcionalidade de distintivos. Quando o botão “Salvar” é pressionado na página de distintivos do administrador, os campos personalizados sempre têm o valor padrão.
Discourse PluginOutlet
<PluginOutlet
@name="admin-above-badge-buttons"
@outletArgs={{hash badge=this.buffered}}
/>
Meu código assets\\javascripts\\discourse\\initializers\\badge-avatar-frame-setup.js:
import { withPluginApi } from "discourse/lib/plugin-api";
import { ajax } from "discourse/lib/ajax";
export default {
name: "badge-avatar-frame-setup",
initialize() {
withPluginApi("0.8.31", (api) => {
api.modifyClass("model:badge", {
pluginId: "discourse-badge-avatar-frame",
pluginProperties: ["avatar_frame_enabled"],
save(data = {}) {
this.pluginProperties.forEach((prop) => {
if (this[prop] !== undefined) {
data[prop] = this[prop];
}
});
console.log("Saving badge with data:", data);
console.log("Saving badge:", this);
console.log("avatar_frame_enabled:", this.avatar_frame_enabled);
console.log("data:", data);
let url = "/admin/badges",
type = "POST";
if (this.id) {
url += `/${this.id}`;
type = "PUT";
}
return ajax(url, { type, data }).then((json) => {
this.updateFromJson(json);
return this;
});
},
});
});
},
};
refer from:Having a hard time overriding the save() function on the admin badge page
Depois de clicar no botão Salvar. posso ver isso no console.
![página de distintivo de administrador após clicar no botão Salvar|690x464]
data:{
"allow_title": true,
"multiple_grant": false,
"listable": true,
"auto_revoke": true,
"enabled": true,
"show_posts": false,
"target_posts": false,
"name": "新しいバッジ",
"description": "",
"long_description": "",
"icon": "angle-left",
"image_upload_id": null,
"image_url": null,
"query": null,
"badge_grouping_id": 6,
"trigger": 0,
"badge_type_id": 1,
"show_in_post_header": false,
"avatar_frame_enabled": false // sempre valor padrão
}
Meu código assets\\javascripts\\discourse\\connectors\\admin-above-badge-buttons\\badge-avatar-frame-settings.hbs:
{{#if this.siteSettings.avatar_frame_enabled}}
<div class="badge-avatar-frame-settings">
<h3>{{i18n "admin.badges.avatar_frame_settings"}}</h3>
<div class="control-group">
<label class="checkbox-label">
<Input @type="checkbox" @checked={{this.avatar_frame_enabled}} />
{{i18n "admin.badges.avatar_frame_enabled"}}
+
{{log @outletArgs.badge}}
{{log @outletArgs}}
</label>
</div>
</div>
{{/if}}
Esta é a saída do console
Meu código db\\migrate\\20250509000000_add_avatar_fields_to_badges.rb:
class AddAvatarFieldsToBadges < ActiveRecord::Migration[6.1]
def change
add_column :badges, :avatar_frame_enabled, :boolean, default: false, null: false
end
end
É normal que ‘@outletArgs.badge’ receba um valor indefinido? :rosto_ansioso_com_suor: O que estou fazendo de errado?
Como posso vincular campos personalizados e sincronizar dados do formulário na página de distintivos do administrador?
