Dev_Work
(Aleksandr)
1
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
Comment vérifier le champ ?
{{#if f.field.name == complete }} {{! ne fonctionne pas }}
OK
{{/if}}
Dev_Work
(Aleksandr)
2
Définir l’entrée pour 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()
}
})
Cela ressemble à ceci
Rails.logger.warn(“#{params }”)
Cela ressemble à ceci
"user_fields" => <ActionController::Parameters {"1" => "true", "2" => ""}
“2” => “”
où se trouve le deuxième champ ?
merefield
(Robert)
3
Cela ne fonctionne pas car vous ne pouvez pas effectuer le calcul logique réel dans un modèle. Cela doit être géré dans le JavaScript correspondant par une propriété calculée. Assurez-vous de lire les guides officiels d’Ember (en veillant à sélectionner la même version que celle utilisée par Discourse) et examinez le code dans l’un des nombreux plugins populaires ici pour vous fournir des exemples.
Dev_Work
(Aleksandr)
4
Merci pour la réponse, je suis intéressé par des exemples provenant de plugins.
merefield
(Robert)
5
Voici un exemple de propriété calculée issue d’une PR que j’ai récemment soumise pour l’excellent plugin National Flags d’Ebsy : discourse-nationalflags/assets/javascripts/discourse/components/user-nationalflags-preferences.js.es6 at master · Ebsy/discourse-nationalflags · GitHub
En voici un autre (“showTimezones”) qui est effectivement utilisé pour masquer/afficher dans un modèle : https://github.com/paviliondev/discourse-team-timezones/blob/master/assets/javascripts/discourse/components/team-display.js.es6
Mais vous trouverez une multitude de modèles remarquables dans nos plugins : Pavilion · GitHub
Dev_Work
(Aleksandr)
6
Bonjour, j’ai trouvé comment remplacer l’action dans les contrôleurs.
exemple
import CreateAccount from 'discourse/controllers/create-account';
export default {
name: 'Create-Account-Popup',
initialize: function () {
CreateAccount.reopen({
actions: {
createAccount() {
// mon code
}
}
});
}
Comment ajouter votre @discourseComputed ?
Je fais comme dans l’exemple mais cela ne fonctionne pas
export default {
name: 'Create-Account-Popup',
@discourseComputed()
ldapForgotPassword() {
console.log('oublié !!');
return this.siteSettings.forum_login_popup_use_ldap;
},
Dev_Work
(Aleksandr)
7
C’est arrivé via @computed
PreferencesAccount.reopen({
@computed
ldapForgotPassword() {
console.log('oublié !!');
return this.siteSettings.forum_login_popup_use_ldap;
},
Vous devriez utiliser ceci pour éviter un avertissement du navigateur.
Il s’agit simplement d’une importation différente :
import discourseComputed from "discourse-common/utils/decorators";