I'll show you some parts of my code so you get an idea of how I do things.
First of all, I have used AjaxEditableLabel from wicket-extensions as a
starting point.
TinyMCE's javascripts should always be loaded:
// Preload TinyMCE
add( new AbstractBehavior()
{
@Override
public void renderHead( IHeaderResponse response )
{
if( !tinyMCELoaded )
{
response.renderJavascriptReference(
TinyMCESettings.javaScriptReference() );
settings = buildTinyMCESettings();
tinyMCELoaded = true;
}
}
} );
In my case TinyMCE is loaded through an AJAX call:
@SuppressWarnings("unchecked")
@Override
protected void onEdit( AjaxRequestTarget target )
{
super.onEdit( target );
final String id = editor.getMarkupId( true );
final StringBuilder buf = new StringBuilder();
// Load plugins
buf.append( settings.getLoadPluginJavaScript() ).append( ";\n" );
// Initialize tinyMCE
buf.append( "tinyMCE.init({" ).append( settings.toJavaScript(
Mode.none, Collections.EMPTY_LIST ) ).append( " });\n" );
buf.append( settings.getAdditionalPluginJavaScript() ).append( ";\n"
);
// Setup editor
buf.append( "tinyMCE.execCommand('mceAddControl',true,'" ).append(
id ).append( "');" );
// Request focus on editor
buf.append( "setTimeout( function()
{tinyMCE.execCommand('mceFocus',true,'" ).append( id ).append( "');}, 500
);" );
target.appendJavascript( buf.toString() );
}
As you can see I initialize TinyMCE, and then perform an mceAddControl
command on the textarea I want to convert to a TinyMCE editor.
Finally, I need to switch back to a textarea before unloading, so the
correct contents are POSTed. To do so, I have added an AjaxCallDecorator to
the close request, and allow implementations to override it:
@Override
protected IAjaxCallDecorator getCloseDecorator()
{
return new AjaxCallDecorator()
{
@Override
public CharSequence decorateScript( CharSequence script )
{
return "tinyMCE.execCommand('mceRemoveControl', false, '" +
editor.getMarkupId() + "'); "
+ super.decorateOnSuccessScript( script );
// Call to save contents back to textarea
// return "tinyMCE.get('" + editor.getMarkupId() +
"').save(); " +
// super.decorateScript( script );
}
};
}
The above code removes TinyMCE from the given textarea, and saves the HTML
back into the textarea. I have commented out the call to save(), since it
was not necessary.
Bas
Daniele Dellafiore wrote:
>
> I get what the real problem is: tinyMce saves internally each "editor"
> that
> is added to a page in a list called, well, editors.
> When I remove the behavior from a textField, I should also call
> tinyMce.remove passing the editors as a parameter.
>
> I will try to do this but any help is appreciated :)
>
> This is for the checkbox that enable/disable the tinyMce behavior.
>
>
> I have a more subtle situation: I have a list of textFields and a button
> to
> add more. When I add a new field, I refresh the list via AJAX to show the
> new field. But, refreshing the list also causes the html id of any element
> in the list to change!
>
> So, when in the end I submit the form, tinyMce cannot find its editors
> anymore cause the parent DIV of the INPUT field that has an associated
> tinyMce editor just changed it's html id.
> Given that the id will change and there is no alternatives, I have to find
> a
> way to keep the associations or to clean all editors and recreate them at
> every list refresh.
>
> What is your suggesions?
>
> --
> Daniele Dellafiore
> http://blog.ildella.net
> http://twitter.com/ildella
>
>
--
View this message in context:
http://www.nabble.com/-tinymce--problem-adding-removing-TinyMceBehavior-dinamically-tp25681833p25747314.html
Sent from the Wicket - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]