사용자 지정 필드 오버라이드

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”=>“”
두 번째 필드는 어디에 있나요?

Template에서는 실제 로직 계산을 수행할 수 없기 때문에 이 방법은 작동하지 않습니다. 이는 해당 JS 파일에서 Computed Property를 사용하여 처리해야 합니다. 공식 Ember 가이드(사용 중인 Discourse 버전과 동일한 버전을 선택하는 것)를 읽고, 이곳에서 인기 있는 Customization > Plugin 중 하나를 참고하여 예시를 확인해 보세요.

답변 감사합니다. 플러그인에서 가져온 예시들이 궁금합니다.

최근 Ebsy의 훌륭한 National Flags 플러그인에 제출한 PR에서 Computed Property의 예를 보여드리겠습니다: 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;
    },

@computed을 통해 발생했습니다

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

브라우저 경고를 피하려면 이것을 사용해야 합니다.

다를 뿐인 import입니다:

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