Benutzerdefiniertes Feld überschreiben

create-account.hbs

{{#if userFields}}

            <div class='user-fields'>

              {{#each userFields as |f|}}

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

              {{/each}}

            </div>

          {{/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

Wie prüfe ich das Feld?

{{#if f.field.name == complete }}  {{! funktioniert nicht }}
  OK
{{/if}}

input für create-account.hbs festlegen

 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()
  
    }
})

Es sieht so aus

Rails.logger.warn(“#{params }”)
Es sieht so aus

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

“2”=>“”
Wo ist das zweite Feld?

Das funktioniert nicht, da du die eigentliche Logikberechnung nicht in einer Vorlage durchführen kannst. Dies muss in der entsprechenden JS-Datei durch eine Computed Property behandelt werden. Lies unbedingt die offiziellen Ember-Anleitungen (stelle sicher, dass du dieselbe Version auswählst, die Discourse verwendet) und schaue dir den Code in einem der vielen beliebten #Plugins hier an, um dir Beispiele zu geben.

Danke für die Antwort, ich interessiere mich für Beispiele aus Plugins.

Hier ist ein Beispiel für ein berechnetes Property aus einem PR, den ich kürzlich für Ebsys hervorragendes National Flags-Plugin eingereicht habe: discourse-nationalflags/assets/javascripts/discourse/components/user-nationalflags-preferences.js.es6 at master · Ebsy/discourse-nationalflags · GitHub

Hier ist eines (“showTimezones”), das tatsächlich verwendet wird, um in einer Vorlage auszublenden/einzublenden: https://github.com/paviliondev/discourse-team-timezones/blob/master/assets/javascripts/discourse/components/team-display.js.es6

In unseren Plugins finden Sie jedoch eine Fülle großartiger Muster: Pavilion · GitHub

Hallo, ich habe herausgefunden, wie man die Aktion in den Controllern überschreibt.

Beispiel

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

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

Wie füge ich deinen @discourseComputed hinzu?

Ich mache es wie im Beispiel, aber es funktioniert nicht

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

Passiert über @computed

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

Du solltest dies verwenden, um eine Browser-Warnung zu vermeiden.

Es ist nur eine andere Import-Anweisung:

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