カスタムフィールドの上書き

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

フィールドを確認するには?

{{#if f.field.name == complete }}  {{! 動作しません }}
  OK
{{/if}}

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

表示は以下のようになります。

Rails.logger.warn(“#{params }”)
表示は以下のようになります。

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

“2”=>“”
2 番目のフィールドはどこにありますか?

これは、テンプレート内で実際のロジック計算を実行できないため、動作しません。対応する JavaScript 内の Computed Property で処理を行う必要があります。必ず公式の Ember ガイド(Discourse が使用しているバージョンと同じものを選択してください)を読み、ここにある多くの人気のプラグインのコードを見て、例を確認してください。

回答ありがとうございます。プラグインの例に興味があります。

これは、私が最近 Ebsy 氏の素晴らしい National Flags プラグインに提出した PR に含まれる計算プロパティの例です:discourse-nationalflags/assets/javascripts/discourse/components/user-nationalflags-preferences.js.es6 at master · Ebsy/discourse-nationalflags · GitHub

こちらは、テンプレートで表示/非表示の切り替えに実際に使用されているもの(“showTimezones”)です:https://github.com/paviliondev/discourse-team-timezones/blob/master/assets/javascripts/discourse/components/team-display.js.es6

しかし、私たちのプラグインには優れたパターンが多数見つかります:Pavilion · GitHub

こんにちは、コントローラー内のアクションを上書きする方法がわかりました。

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

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

@discourseComputed を追加するにはどうすればよいでしょうか?

例のように試しましたが、動作しません

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

ブラウザの警告を回避するために、これを使用してください。

単にインポートが異なるだけです。

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