Dev_Work
(Aleksandr)
24 Dicembre 2019, 3:08pm
1
create-account.hbs
{{#if userFields}}
{{#each userFields as |f|}}
{{user-field field=f.field value=f.value}}
{{/each}}
{{/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
Come verificare il campo?
{{#if f.field.name == complete }} {{! non funziona }}
OK
{{/if}}
Dev_Work
(Aleksandr)
24 Dicembre 2019, 4:32pm
2
Imposta lâinput per 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()
}
})
CosĂŹ appare
Rails.logger.warn(â#{params }â)
CosĂŹ appare
"user_fields"=>ActionController::Parameters {"1"=>"true", "2"=>""}
â2â=>ââ
dovâè il secondo campo?
merefield
(Robert)
26 Dicembre 2019, 10:06am
3
Questo non funziona perchÊ non è possibile eseguire il calcolo logico effettivo in un Template. Ciò deve essere gestito nel corrispondente file JS tramite una Computed Property. Assicurati di leggere le guide ufficiali di Ember (ricordandoti di selezionare la stessa versione utilizzata da Discourse) e di esaminare il codice in uno dei molti popolari plugin presenti qui per trovare degli esempi.
Dev_Work
(Aleksandr)
26 Dicembre 2019, 10:12am
4
Grazie per la risposta, sono interessato agli esempi forniti dai plugin.
merefield
(Robert)
26 Dicembre 2019, 10:25am
5
Ecco un esempio di proprietà calcolata da una PR che ho recentemente inviato al plugin eccellente di Ebsy, National Flags: discourse-nationalflags/assets/javascripts/discourse/components/user-nationalflags-preferences.js.es6 at master ¡ Ebsy/discourse-nationalflags ¡ GitHub
Ecco un esempio (âshowTimezones â) che viene effettivamente utilizzato per nascondere/mostrare in un template: https://github.com/paviliondev/discourse-team-timezones/blob/master/assets/javascripts/discourse/components/team-display.js.es6
ma troverai unâinfinitĂ di ottimi pattern nei nostri plugin: Pavilion ¡ GitHub
Dev_Work
(Aleksandr)
5 Febbraio 2020, 11:28am
6
Ciao, ho capito come sovrascrivere lâazione nei controller.
Esempio
import CreateAccount from 'discourse/controllers/create-account';
export default {
name: 'Create-Account-Popup',
initialize: function () {
CreateAccount.reopen({
actions: {
createAccount() {
// il mio codice
}
}
});
}
Come posso aggiungere il mio @discourseComputed?
Ho seguito lâesempio ma non funziona
export default {
name: 'Create-Account-Popup',
@discourseComputed()
ldapForgotPassword() {
console.log('dimenticato!!');
return this.siteSettings.forum_login_popup_use_ldap;
},
Ok, I made it work but its somewhat tricky.
Create a connector class with this code.
import { set } from "@ember/object";
import EmberObject from "@ember/object";
export default {
@discourseComputed("model.user_fields.@each.value")
publicUserFields() {
const siteUserFields = this.site.get("user_fields");
if (!isEmpty(siteUserFields)) {
const userFields = this.get("model.user_fields");
return siteUserFields
.filterBy("show_on_user_card", true)
.sortBy("posâŚ
Dev_Work
(Aleksandr)
5 Febbraio 2020, 11:55am
7
Ă successo tramite @computed
PreferencesAccount.reopen({
@computed
ldapForgotPassword() {
console.log('dimenticato!!');
return this.siteSettings.forum_login_popup_use_ldap;
},
Dovresti usare questo per evitare un avviso del browser.
Ă semplicemente un diverso import:
import discourseComputed from "discourse-common/utils/decorators";