2012-08-29 14 views
5

sono riuscito ad ottenere un nuovo gruppo nastro seguendo l'articolo citato in How to create the custom buttons horizontally one below the other in ribbon of TridionJavascript sul gruppo nastro

Ora sto cercando di ottenere un JavaScript in esecuzione ogni volta che qualcosa cambia nella GUI (Eliminazione/Visualizzazione pulsanti).

ho questo nella configurazione:

<!-- In the cfg:groups part --> 
<cfg:group name="ClientGuiMods.ContentGroup" description=""> 
    <cfg:fileset> 
     <cfg:file type="script">/Scripts/CreateRibbonGroup.js</cfg:file> 
    </cfg:fileset> 
    <cfg:dependencies> 
     <cfg:dependency>Tridion.Web.UI.Editors.CME</cfg:dependency> 
    </cfg:dependencies> 
</cfg:group> 

<!-- In the ribbontoolbars add part --> 
<ext:extension pageid="HomePage" name="Content" assignid="ContentGroupId"> 
    <ext:group>~/Scripts/ContentGroup.ascx</ext:group> 
    <ext:dependencies> 
     <cfg:dependency>ClientGuiMods.ContentGroup</cfg:dependency> 
    </ext:dependencies> 
    <ext:apply> 
     <ext:view name="DashboardView"> 
      <ext:control id="DashboardToolbar" /> 
     </ext:view> 
    </ext:apply> 
</ext:extension> 

E questo in Javascript:

Type.registerNamespace("ClientGuiMods"); 

ClientGuiMods.ContentGroup = function ContentGroup(element) 
{ 
    console.log('RibbonGroupCreated'); 
    Tridion.OO.enableInterface(this, "ClientGuiMods.ContentGroup"); 
    this.addInterface("Tridion.Controls.RibbonItemsGroup", [element]); 
}; 

Ho provato diversi argomenti a favore this.addInterface(), ma non è mai viene chiamato. È questo il modo corretto? O c'è forse un altro modo per ottenere uno script chiamato sulla barra multifunzione della barra multifunzione?

+0

Non è affatto chiaro cosa stai cercando di fare. Cosa intendi con "Sto cercando di ottenere un Javascript in esecuzione ogni volta che qualcosa cambia nel Gui (nascondendo/mostrando i pulsanti)"? Normalmente implementeresti un comando, che dovresti collegare a un pulsante.Se il comando è abilitato, il pulsante sarà abilitato, ecc. Quindi, quando si fa clic sul pulsante, il comando viene eseguito. I pulsanti verranno regolarmente aggiornati automaticamente, ad esempio quando la selezione cambia nell'elenco. –

+0

@PeterKjaer: ho un gruppo di pulsanti sulla barra multifunzione, creato da un ascx. Questa parte ho compiuto seguendo l'articolo di Bart. Ora ho un gruppo di pulsanti sulla barra multifunzione con alcuni pulsanti che si trovano anche in casa e creano i nastri. Quello che sto cercando di realizzare ora è quello di nascondere i pulsanti (o comandi) che non sono disponibili, la stessa cosa che sta accadendo su CreateRibbonPage. La differenza con CreateRibbonPage è che sto facendo tutto questo in un gruppo di nastri. Potrei farlo su ogni pulsante, ma probabilmente avrei dovuto implementare ogni pulsante singolarmente. –

+0

Bottomline è che voglio realizzare la stessa cosa che posso su una pagina a nastro, ma solo su un gruppo di nastri. La soluzione che ho fornito si aggancia alla pagina della barra multifunzione in cui viene aggiunto il gruppo della barra multifunzione (Home in questo esempio) ed esegui la logica qui. Sono tutto aperto per una soluzione migliore. –

risposta

1

@Bart, ho provato la soluzione, ma non ho potuto farlo funzionare.

Scavando un po 'più in Javascripts in chrome ho scoperto che non c'è nessun hook per lanciare Javascript in più come RibbonGroup (correggimi se sbaglio).

Tuttavia, ho trovato un modo per raggiungere la pagina "HomePage" RibbonPage e ottenere l'attivazione degli eventi da lì.

La cosa in più di cui ho bisogno è "c: pagetype = 'Homepage'" nella pagina Ribbon denominata HomePage nel DOM, che non è presente per impostazione predefinita. Questo può essere impostato includendo uno script di evento di caricamento alla fine. Così ora il mio script ha questo aspetto.

Type.registerNamespace("ClientGuiMods"); 

ClientGuiMods.CreateRibbonPage = function CreateRibbonPage(element) 
{ 
    Tridion.OO.enableInterface(this, "ClientGuiMods.CreateRibbonPage"); 
    this.addInterface("Tridion.Controls.RibbonPage", [element]); 
}; 
ClientGuiMods.CreateRibbonPage.prototype.updateState = function CreateRibbonPage$updateState(stateObject) 
{ 
    //... 
    //Ribbonpage logic to update the state of your buttons and groups 
}; 

console.log('Homepage: ' + document.getElementById('HomePage')); //.setAttribute('c:pagetype', 'HomePage'); 

var ClientScripts = { 
    registerHomepage: function() { 
     console.log('adding c:pagetype att'); 

     var homepage = document.getElementById('HomePage'); 

     if (homepage) { 

      homepage.setAttribute('c:pagetype', 'HomePage'); 


     } 
    } 
} 
if (document.addEventListener && !Tridion.Utils.Dom.isIE) 
    $evt.addEventHandler(window, "DOMContentLoaded", ClientScripts.registerHomepage); 
else 
    $evt.addEventHandler(window, "readystatechange", ClientScripts.registerHomepage); 

Tridion.Controls.Deck.registerPageType(ClientGuiMods.CreateRibbonPage, "HomePage"); 
+0

ha aggiornato il mio esempio di codice con il metodo di inizializzazione mancante, non sono sicuro che ciò faccia alcuna differenza –

+0

Mi sembra che tu stia andando nella direzione sbagliata qui. Potresti chiarire cosa stai cercando di fare (vedi il mio commento in alto) e forse potremmo trovare una soluzione che si adatta meglio con il framework esistente ... –

3

Non ho mai guardato il gruppo come qualcosa di diverso da un contenitore per i comandi (pulsanti di lettura). Quindi l'unica interfaccia che ho usato è Tridion.Cme.Command sul pulsante JavaScript.

Ma penso che quello che stai cercando è la ControlResource quale è possibile specificare nelle vostre ContentGroup.ascx.cs

using Tridion.Web.UI.Core; 
using Tridion.Web.UI.Controls; 
using Tridion.Web.UI.Core.Controls; 

namespace ClientGuiMods 
{ 
    [ControlResources("ClientGuiMods.ContentGroup")] 
    public class ContentGroup : TridionUserControl 
    { 
    } 
} 

Ora, è possibile utilizzare l'interfaccia Tridion.ControlBase in JavaScript.

Type.registerNamespace("ClientGuiMods"); 

ClientGuiMods.ContentGroup = function ContentGroup(element) { 
    console.log('RibbonGroupCreated'); 
    Tridion.OO.enableInterface(this, "ClientGuiMods.ContentGroup"); 
    this.addInterface("Tridion.ControlBase", [element]); 
}; 

ClientGuiMods.ContentGroup.prototype.initialize = function ContentGroup$initialize() { 
    // the control is initialized here, we can use the following properties now 
    var props = this.properties; 
    var controls = props.controls; 
    var container = this.getElement(); 
}; 
1

potrei essere fuori segnano qui, ma sembra che tu abbia una serie di pulsanti sotto lo stesso gruppo, e si desidera avere queste si comportino in modo coerente in termini di disponibilità.

Avevo un caso simile in cui è necessario attivare lo stesso evento su Salva, Salva & Chiudi e Salva & Nuove operazioni. Quello che ho finito per fare è stato scrivere il codice come estensione di comando Salva (ampiamente basata sui dettagli di Jaime here) e poi, dalle estensioni SaveClose e SaveNew chiamerei le funzioni Save._isEnabled e Save._isAvailable per determinare se i miei comandi fossero disponibile e Save._execute ogni volta che gli editori fanno clic su SaveClose & SaveNew.

Non elegante come il suggerimento di Peter, ma ha fatto il lavoro.

+0

Grazie nuno. Il requisito da parte del cliente è di unire la casa e creare un nastro. Alcuni pulsanti devono essere rimossi e altri non devono essere visualizzati quando sono disabilitati. I pulsanti non hanno esigenze aggiuntive oltre al loro comportamento predefinito. E la parte difficile è tenerli nascosti (come quello che succede sul nastro Crea, ad esempio il nuovo componente si nasconde quando ti trovi in ​​un gruppo strutturale.) So che può essere fatto anche in un comando, ma sembra meglio farlo il modo in cui viene eseguito sulla barra multifunzione Crea, dove il metodo updateState del nastro si occupa di questo. –

+0

Il nastro Crea chiama solo il metodo isAvailable di ciascun comando; la logica per stabilire se è disponibile o meno è interamente incapsulata nel Comando stesso, come dovrebbe essere. –

Problemi correlati