You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
NOTE: This issue was moved over from the marko-widgets repo. For more discussion please see the earlier Github issue: marko-js-archive/marko-widgets#167
Marko Widgets will detect that the template is the entry point and compile the template differently such that it no longer exports a Template instance, but rather it will be a module that exports two methods:
render(input) - Allows the UI component be rendered via a JavaScript API (e.g., require('my-component').render({ name: 'Frank' }).appendTo(document.body);)
renderer(input, out) - Used by the custom tag renderer
The previous setup would now be simplified as shown below:
By making the template the entry point, we can do a lot more things that were not previously possible. This is because we have full control over how a Marko template is compiled while we don't have control how the user writes the JavaScript code.
Single file component
We could easily support inlining the JavaScript code for the component into the template as shown below:
With the new setup, there are no references to the marko-widgets module when building a UI component. This is a good thing since it makes it easier to merge Marko Widgets functionality into the core marko package (future proposal).
Backwards compatibility
We intend to maintain backwards compatibility. Developers could start to use the new, simplified setup, but old code would continue to work.
NOTE: This issue was moved over from the
marko-widgets
repo. For more discussion please see the earlier Github issue: marko-js-archive/marko-widgets#167Current setup:
src/components/my-component/
index.js
template.marko
Proposed solution
The above setup is not bad, but there is some boilerplate that we would like to remove by making the following changes:
index.js
→component.js
template.marko
→index.marko
(the template becomes the entry point)require('marko-widgets').defineComponent(...)
template: require('./template.marko')
Marko Widgets will detect that the template is the entry point and compile the template differently such that it no longer exports a
Template
instance, but rather it will be a module that exports two methods:render(input)
- Allows the UI component be rendered via a JavaScript API (e.g.,require('my-component').render({ name: 'Frank' }).appendTo(document.body);
)renderer(input, out)
- Used by the custom tag rendererThe previous setup would now be simplified as shown below:
src/components/my-component/
component.js
index.marko
Additional thoughts
Future improvements
By making the template the entry point, we can do a lot more things that were not previously possible. This is because we have full control over how a Marko template is compiled while we don't have control how the user writes the JavaScript code.
Single file component
We could easily support inlining the JavaScript code for the component into the template as shown below:
No references to
marko-widgets
With the new setup, there are no references to the
marko-widgets
module when building a UI component. This is a good thing since it makes it easier to merge Marko Widgets functionality into the coremarko
package (future proposal).Backwards compatibility
We intend to maintain backwards compatibility. Developers could start to use the new, simplified setup, but old code would continue to work.
Related proposals
The text was updated successfully, but these errors were encountered: