تجاوز الحقل المخصص

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 }}  {{! لا يعمل }}
  تم بنجاح
{{/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”=>“”
أين الحقل الثاني؟

هذا لا يعمل لأنك لا يمكنك تنفيذ حسابات المنطق الفعلي في قالب. يجب التعامل مع ذلك في ملف JavaScript المقابل باستخدام خاصية محسوبة. تأكد من قراءة الدليل الرسمي لإمبر (مع التأكد من اختيار نفس الإصدار الذي تستخدمه Discourse) والنظر إلى الكود في أحد الإضافات الشعبية لـ Customization > Plugin هنا لتزويدك بأمثلة.

شكرًا على الإجابة، أنا مهتم بالأمثلة من الإضافات

إليك مثال على خاصية محسوبة من طلب سحب قدمته مؤخرًا إلى إضافة الأعلام الوطنية الممتازة من Ebsy: 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('تم النسيان!!');
                return this.siteSettings.forum_login_popup_use_ldap;
            },

يجب عليك استخدام هذا لتجنب تحذير المتصفح.

إنه مجرد استيراد مختلف:

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