It is currently 19 April 2025, 1:50 Advanced search

Custom element e proprietà

Domande e risposte su come utilizzare Instant Developer Foundation al meglio

Custom element e proprietà

Postby d.termini » 14 April 2025, 14:36

Ho aggiunto una proprietà con setter e getter al wrapper, solo che non capisco perché la set funziona, la get no.

Code: Select all
Object.defineProperty(SchedulerWrapper.prototype, "views", {
  get: function () {
   console.log('get views', this._views);
   return this._views;
  },
  set: function (value) {
   console.log('set views', value);
   this._views = value;
  }
});


"views" è definita così
property_custom_element.png
property_custom_element.png (27.15 KiB) Viewed 236 times


Cosa potrei aver sbagliato?
Le ho fatte tutte così, ma in effetti non ho mai verificato se le altre funzionino correttamente in get.
d.termini
 
Posts: 1638
Joined: 13 November 2017, 8:41

Re: Custom element e proprietà

Postby d.pierangeli » 14 April 2025, 14:51

La lettura delle proprietà non viene fatta sul client ma lato server, altrimenti non potrebbe essere sincrono.
Invece del getter client devi fare in modo di inviare il valore aggiornato al server quando viene modificata.
User avatar
d.pierangeli
Pro Gamma
Pro Gamma
 
Posts: 8092
Joined: 30 September 2010, 15:35

Re: Custom element e proprietà

Postby d.termini » 14 April 2025, 15:27

Cioè?
Al momento sono proprietà di configurazione, volevo leggere il valore "a design" per aggiungere un nuovo elemento a quelli predefiniti, solo che mi dà null...

Sostanzialmente
Code: Select all
IDArray v = componente.views
// Qui v è null
v.addObject(nuovaVista)
componente.views = v
d.termini
 
Posts: 1638
Joined: 13 November 2017, 8:41

Re: Custom element e proprietà

Postby d.pierangeli » 14 April 2025, 15:33

E' null perchè lato server è null.

Dopo la creazione lato client e la modifica potresti inviare il valore al server, a quel punto potrai leggerne il valore. Chiaramente non potrai farlo nella load della videata o nella stessa richiesta che fa nascere l'elemento a run-time.
Altrimenti trasformi la lettura della proprietà in una funzione che lancia un evento onViewsRead e nell'evento ti fai mandare il valore come parametro.
User avatar
d.pierangeli
Pro Gamma
Pro Gamma
 
Posts: 8092
Joined: 30 September 2010, 15:35

Re: Custom element e proprietà

Postby d.termini » 15 April 2025, 6:36

Ok, ho capito, il wrapper non è ancora istanziato e quindi la proprietà (valorizzata durante l'istanziazione) non è valorizzata.
Quindi io se gli cambio il valore lui lo cambia solo quando viene istanziato e tutto funziona, ma non posso leggerlo prima.

Il problema è che mi serve avere un default (impostato nel wrapper) da modificare prima di "far partire" il custom element, perché dopo è un casino cambiare certe cose a runtime.
Potrei farmi un default lato InDe ma poi ricordarsi di tenerlo allineato...

Mi fa venire il mal di testa.
d.termini
 
Posts: 1638
Joined: 13 November 2017, 8:41

Re: Custom element e proprietà

Postby d.termini » 15 April 2025, 6:58

Ho provato a modificare così il codice:
1. Aggiunto evento OnRealize, richiamato nella funzione Realize()
2. Spostato l'inizializzazione delle proprietà nell'evento onRealize lato InDe

Mi sarei aspettato che funzionasse, che il getter della proprietà funzionasse in quanto adesso il wrapper c'è, ma in realtà non viene neanche stampato il console.log che ho messo, che sia null o no, non sta funzionando il getter.
d.termini
 
Posts: 1638
Joined: 13 November 2017, 8:41

Re: Custom element e proprietà

Postby d.pierangeli » 15 April 2025, 8:22

Penso che sia un problema architetturale.

Il componente è lato client ed è javascript. Il codice invece è lato server e C#.
Lato server non c'è il componente, c'è un wrapper generico che ha un id e una mappa proprietà-valore.

Se lato server chiedi il valore lui guarda la mappa e lo restituisce se presente oppure restituisce null.

Il getter non può essere chiamato perchè il server è sincrono e http, non può fare un ciclo completo (mi stoppo, mando un messaggio al client, aspetto la risposta con il getter e poi faccio ripartire il codice C#).

Lato server hai solo la mappa che restituisce in modo sincrono quello che il client ha mandato in precedenza.
Se vuoi chiedere qualcosa al client senza che questo l'abbia detto in precedenza devi usare un evento e rendere asincrona la gestione.
- chiamo la funzione getViewValues e mi fermo
- scatta l'evento onGetViewValues, prendo il risultato e continuo
User avatar
d.pierangeli
Pro Gamma
Pro Gamma
 
Posts: 8092
Joined: 30 September 2010, 15:35

Re: Custom element e proprietà

Postby d.termini » 15 April 2025, 8:52

Capito, quindi posso togliere tutti i getter che ho definito e cambiarli con delle funzioni e rispettivo evento nei casi in cui dovessero servirmi... un po' macchinoso e rende il codice molto meno comprensibile, soprattutto per il fatto che non è quello che ci si aspetta.

Però ad essere sincero nella guida all'integrazione dei componenti custom c'è indicato di usare setter E getter :P
https://doc.instantdeveloper.com/?ARTID ... B&LANG=ita
d.termini
 
Posts: 1638
Joined: 13 November 2017, 8:41

Re: Custom element e proprietà

Postby d.pierangeli » 15 April 2025, 9:42

Hai ragione, segnalo di spiegare meglio.
User avatar
d.pierangeli
Pro Gamma
Pro Gamma
 
Posts: 8092
Joined: 30 September 2010, 15:35


Return to Tips & Tricks - Foundation

Who is online

Users browsing this forum: Google [Bot] and 29 guests