Sovrascrivi campo personalizzato

create-account.hbs

{{#if userFields}}

            

              {{#each userFields as |f|}}

                {{user-field field=f.field value=f.value}}

              {{/each}}

            

          {{/if}}

js

var siteSettings = Discourse.SiteSettings;
    console.log(siteSettings.forum_name);

complete = $(".user-field-" + siteSettings.forum_name);

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/controllers/create-account.js.es6#L239-L245

Come verificare il campo?

{{#if f.field.name == complete }}  {{! non funziona }}
  OK
{{/if}}

Imposta l’input per create-account.hbs

 var siteSettings = Discourse.SiteSettings;
          $('.control-label').each( function () {
  if($(this).text().trim() === siteSettings.forum_name) {
  const uuid ='lp'+(()=>([1e7]+-1e11).replace(/[018]/g,c=>(c^crypto.getRandomValues(new Uint8Array(1))[0]&15 >> c/4).toString(16)))();
var id = "user-" + $(this).parent().attr('id');
    var input = $('#' + id);
    input.val(uuid);
   // $(this).parent().hide()
  
    }
})

CosĂŹ appare

Rails.logger.warn(“#{params }”)
CosĂŹ appare

"user_fields"=>ActionController::Parameters {"1"=>"true", "2"=>""}

“2”=>“”
dov’è il secondo campo?

Questo non funziona perchÊ non è possibile eseguire il calcolo logico effettivo in un Template. Ciò deve essere gestito nel corrispondente file JS tramite una Computed Property. Assicurati di leggere le guide ufficiali di Ember (ricordandoti di selezionare la stessa versione utilizzata da Discourse) e di esaminare il codice in uno dei molti popolari plugin presenti qui per trovare degli esempi.

Grazie per la risposta, sono interessato agli esempi forniti dai plugin.

Ecco un esempio di proprietà calcolata da una PR che ho recentemente inviato al plugin eccellente di Ebsy, National Flags: discourse-nationalflags/assets/javascripts/discourse/components/user-nationalflags-preferences.js.es6 at master ¡ Ebsy/discourse-nationalflags ¡ GitHub

Ecco un esempio (“showTimezones”) che viene effettivamente utilizzato per nascondere/mostrare in un template: https://github.com/paviliondev/discourse-team-timezones/blob/master/assets/javascripts/discourse/components/team-display.js.es6

ma troverai un’infinità di ottimi pattern nei nostri plugin: Pavilion · GitHub

Ciao, ho capito come sovrascrivere l’azione nei controller.

Esempio

import CreateAccount from 'discourse/controllers/create-account';
export default {

    name: 'Create-Account-Popup',
    initialize: function () {
        CreateAccount.reopen({
            actions: {
                createAccount() {
// il mio codice
                }
            }
        });
}

Come posso aggiungere il mio @discourseComputed?

Ho seguito l’esempio ma non funziona

export default {
    name: 'Create-Account-Popup',
    
    @discourseComputed()
    ldapForgotPassword() {
        console.log('dimenticato!!');
        return this.siteSettings.forum_login_popup_use_ldap;
    },

È successo tramite @computed

        PreferencesAccount.reopen({
            @computed
            ldapForgotPassword() {
                console.log('dimenticato!!');
                return this.siteSettings.forum_login_popup_use_ldap;
            },

Dovresti usare questo per evitare un avviso del browser.

È semplicemente un diverso import:

import discourseComputed from "discourse-common/utils/decorators";