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

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”=>“”
أين الحقل الثاني؟

هذا لا يعمل لأنك لا تستطيع إجراء عملية حسابية منطقية فعلية داخل قالب (Template). يجب معالجة هذا في ملف JavaScript المقابل عبر خاصية محسوبة (Computed Property). تأكد من قراءة أدلة Ember الرسمية (تأكد من اختيار الإصدار نفسه الذي يستخدمه Discourse) واطّلع على الكود في أحد الإضافات (#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";