Forum Discussion
Thanks for that. Usually that would be a good way to do it.
My "problem" is that the second custom component in question uses a freemarker macro to do a large api call and I don't want to do that call unless I specifically load the second component.
PerBonomi - In that case, you can create an Endpoint instead of your CC2, and make an ajax call to that endpoint from CC1. This would load the content on click rather than show/hide and would save your API call unless the user clicks.
- DougS11 years agoKhoros Oracle
If you use an endpoint, you can share code between your components and endpoints by including them in a "macro" file (you can create macros through the endpoints tab in Studio).
If you find that you really need to render a component of some kind (and not an endpoint), we do have these javascript functions you can call to render components dynamically via JavaScript:
/** * Renders a component in place. * * @param componentId (String) The ID of the component to render. * @param data (Object) An object literal that can contain key/value pairs that will be passed as parameters to the component. * @param ajaxOptions (Object) An object literal that will be used to extend the XHR transport object. The "success" and "error" functions cannot be provided since they are used to render in place. * @param clientId (String) ID of element where the component should be rendered. If not specified then document.write will be used to write out the component in the current location of the script tag that contains this directive. */ LITHIUM.Components.renderInPlace(componentId, data, ajaxOptions, clientId);
/** * Renders a component. * * @param componentId (String) The ID of the component to render. * @param data (Object) An object literal that can contain key/value pairs that will be passed as parameters to the component. * @param ajaxOptions (Object) An object literal that will be used to extend the XHR transport object, typically used to define a "success" callback function. */ LITHIUM.Components.render(componentId, data, ajaxOptions);
-Doug
- mwortel10 years agoContributor
Hi, is it possible to 'reload' a custom component with one of the above described functions? I have tried but I do not get it working.
What I want is to rerender a custom component with a different parameter depending on a clicked button in another custom component.
I can build an endpoint but I thought this would be an easier way.I have tried to run it from the console and from a custom component. Maybe I'm missing an essential AJAX option?
Thanks. - rwm10 years agoAdvisor
That is interesting Doug. Is that function supposed to also work with a modal component? I'm trying to call such a component this way, essentially with this:
$(".item a").click(function(e) {
var mydata = "Some data to pass"; var ajaxOptions = {success:console.log('SUCCESS!') }; LITHIUM.Components.render("MyModalComponent", {data:mydata}, ajaxOptions);
});When I do I can see the success message in the console when tells me it should work, but the modal window does not open. The modal component does execute properly in studio when I preview it so that is not the problem. Any ideas?
- DougS10 years agoKhoros Oracle
You could use that to build a modal widget, but it would be up to you to supply the modal library to feed the markup to -- LITHIUM.Components.render will return markup that you can feed to a modal libary. We actually have a special freemarker derictive for loading components in a modal dialog if you are interested in try that out -- see this article for more information about that:
http://community.lithium.com/t5/Developers-Knowledge-Base/Creating-Modal-Dialogs/ta-p/77986
-Doug
Related Content
- 10 years ago
- 4 years agoInactive User