2015-05-28 25 views
20

Abbiamo un rendering che elenca gli elementi selezionati in un oggetto TreeSelect nell'elemento corrente. Nel nostro caso li chiamiamo "Tags" (1)Sitecore 8, MVC, Experience Editor: come eseguire un aggiornamento di rendering dopo l'utilizzo di un editor di campi Pulsante

Abbiamo aggiunto un pulsante di editor di campi al componente per consentire all'editor di modificare gli elementi selezionati. (2) (Come descritto per esempio Adding a custom component)

Quando un editor fa clic su (2) la finestra dell'editor (3) viene aperta in una finestra di dialogo. L'editor può selezionare diversi elementi (chiamati tag nel nostro caso) utilizzando TreeSelect.

Quando l'editor preme il pulsante OK (4), i valori sono impostati.

Ora per il problema:

I valori sono in realtà impostati come essi vengono memorizzati quando l'editor preme il pulsante Salva, ma noi vogliamo la nostra lista nella pagina (1) in modo da riflettere immediatamente le voci impostate quando le presse Editor il pulsante ok (4), cioè prima di dover effettivamente salvare l'intero oggetto.

Come raggiungerlo?

(io sono in contatto con il supporto Sitecore ma finora non ho ottenuto alcuna risposta ...)

Screenshot

Aggiornamento Dopo un sacco di conversazione con il supporto non abbiamo ancora soluzione utile.

Abbiamo provato a trasformarlo in un renderer di campo che visualizza i collegamenti. Che cosa ha funzionato:

  • Il campo si aggiorna quando lo si è modificato nell'editor di campo popup. (ma ...)
  • Sembra buono la prima volta quando viene caricata la pagina.
  • È possibile creare un pulsante WebEdit con i comandi per modificare il campo e aggiungerlo come pulsante personalizzato al campo (registrare <command name="webedit:fieldeditor" type="Sitecore.Shell.Applications.WebEdit.Commands.FieldEditor, Sitecore.Client"/> e impostare Fare clic sul pulsante su webedit:fieldeditor(command={3473DDA1-2983-493C-AF7A-054C75AA7AD3},fields=NameOfField dove il guid si rivolge a esso e su di esso è impostata un'icona .)

Cosa non ha funzionato è stato:

  • il campo si aggiorna dal valore grezzo, non quello che voglio da visualizzare. Il codice del server è coinvolto, ma non nel rendering del codice html.
  • Quando voglio modificare il valore nell'editor di campo, il valore inviato all'editor di campo non è il valore grezzo ma ciò che effettivamente viene visualizzato sulla pagina. (Immagino che questo possa essere risolto in qualche modo)

Il problema del supporto è diventato una richiesta di funzionalità per consentire al server di essere coinvolto nel rendering del campo, non solo di inviare un nuovo valore al codice JavaScript che lo aggiorna. Il server esegue il primo rendering in modo tale che quando è già coinvolto nell'aggiornamento, dovrebbe essere consentito eseguire il rendering anche nei seguenti orari.

Abbiamo deciso di non dedicare più tempo a questo in questo momento (abbiamo anche altre cose da fare) e abbiamo una cattiva esperienza editoriale poiché il campo non viene aggiornato finché l'editor non salva effettivamente l'elemento.

Ancora non abbiamo una soluzione adeguata per questo problema. Se vuoi continuare a lavorarci e vuoi un riferimento al mio problema, è 439059.

+1

In generale il team di supporto Sitecore solo vi chiederà di compilare ulteriori informazioni quando il biglietto non è completo al 100%. La mia esperienza con il dipartimento di supporto è che essi (quando le informazioni sono complete) ti forniranno sempre una soluzione/soluzione adatta al tuo problema. – Younes

+2

Sì, @Younes, la maggior parte delle volte il supporto del sitecore dà delle buone risposte, ma in questo numero ci sono stati diversi malintesi (sia miei sia la loro colpa) che mi hanno reso scontroso. ;-) Quindi ho pensato di offrire alla community StackOverflow la possibilità di produrre una risposta migliore/più veloce. E quando ottengo una risposta più persone dovrebbero essere in grado di leggerlo. –

risposta

0

Potrebbe non essere utile qui. L'ho fatto su siti normali, ma non su Sitecore. Ma ecco una possibilità ...

Questa è una situazione in cui si passerà una funzione di richiamata alla finestra popup figlio. Questa richiamata farà sì che la finestra del chiamante/genitore rileggi/ricarichi le informazioni appena aggiornate dal bambino.

Esempio: utente preme (2) per aprire la finestra Editor (3) (finestra Editor è aperto e la funzione di callback viene passato come parametro) preme User pulsante "OK" (4). Il gestore di eventi del pulsante "OK" aggiorna le modifiche, quindi chiama la funzione di richiamata che ricarica le informazioni aggiornate e chiude la finestra popup. Una volta chiuso il popup, la finestra genitore ora mostra le informazioni che il popup/editor ha appena aggiornato.

Questo richiede uno sviluppo javascript (jquery) lato client, ma è abbastanza pratico normalmente.

1

Si prega di dare un'occhiata a quello post.

Come funziona: how-it-works