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, weil du die eigentliche Logikberechnung nicht in einer Vorlage durchführen kannst. Dies muss in der entsprechenden JavaScript-Datei über eine berechnete Eigenschaft (Computed Property) geregelt werden. Lies dir unbedingt die offiziellen Ember-Dokumentationen (wähle dabei die Version aus, die Discourse verwendet) durch und schau dir den Code in einem der vielen beliebten Customization > Plugin hier an, um Beispiele zu erhalten.

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";