覆盖自定义字段

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 中通过计算属性来处理。请务必阅读官方 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() {
// 我的代码
                }
            }
        });
}

如何添加你的 @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";