Constructor
new RouterComponent(rootHtmlId, modelRenderer, routeContentsHtmlId, model)
Parameters:
| Name | Type | Description | 
|---|---|---|
| rootHtmlId | String | The HTML element id where the router renders. | 
| modelRenderer | function | the model renderer function | 
| routeContentsHtmlId | String | The HTML element id where the different views of the router are placed | 
| model | Model | The model | 
Example
var router = new RouterComponent(
     // id of the HTML element where router renders.
     'router',
     //HTML of the router.
     () => "<div id='router'><div id='maincontent'></div></div>",
     // id inside the router where the current page component renders.
     'maincontent');
router.setRouterConfig(
{
   login: { //rendered on http://<host>/<page>.html#login
     component: new LoginComponent(), // LoginComponent is a Component
     title: 'Login'
   },
   // more pages
   defaultRoute: 'login'
});
router.start();Extends
Members
childComponentIds :Object.<string, Component>
Type:
- Object.<string, Component>
- Inherited From:
- Source:
childComponents :Array.<Component>
Type:
- Array.<Component>
- Inherited From:
- Source:
childTags :Array.<String>
During render, if in the HTML provided by the renderer function one of these tags is found, the createChildComponent() function is called.
Type:
- Array.<String>
- Inherited From:
- Default Value:
- empty array
 
- Source:
eventListeners :Object.<string, {callback: function(), eventType: String}>
Type:
- Object.<string, {callback: function(), eventType: String}>
- Inherited From:
- Source:
htmlNodeId :String
Type:
- String
- Inherited From:
- Default Value:
- null
 
- Source:
stopped :Boolean
Stopped Components do not render.
Type:
- Boolean
- Inherited From:
- Default Value:
- true
 
- Source:
Methods
addChildComponent(component)
The HTML element where the child Component will render will not be re-rendered when this Component (the parent) is re-rendered.
The child component will be started (and thus immediately rendered) or stopped if this Component is currently started or stopped, respectively.
Parameters:
| Name | Type | Description | 
|---|---|---|
| component | Component | The child Component. | 
- Inherited From:
- Source:
addEventListener(eventType, nodesQuery, callback)
Listeners added to elements controlled by this Component should be added via this method, not directly to the HTML elements, because they can be removed during re-render. Listeners added with this method are always restored to the elements matching the selector query after rendering.
Parameters:
| Name | Type | Description | 
|---|---|---|
| eventType | String | The event type to be added to the elements. | 
| nodesQuery | String | A HTML selector query to find elements to attach the listener to. | 
| callback | function | The callback function to dispatch the event. | 
- Inherited From:
- Source:
addModel(modelName, model)
ModelComponents can have more than one model. The model passed in the constructor is the 'default' model. Additional models must have a name. When the modelRenderer function is called, the passed object to the function will contain the 'default' model itself and all the additional models under their respective names. For example, a code like:
var myModel = new Fronty.Model();
myModel.value = 'foo';
var mySecondaryModel = new Fronty.Model();
mySecondaryModel.value = 'bar';
var myModelComponent = new Fronty.ModelComponent(..., myModel, ...);
myModelComponent.addModel('secondary', mySecondaryModel);
{
   value: 'foo',
   secondary: {
       value: 'bar'
   }
}
Parameters:
| Name | Type | Description | 
|---|---|---|
| modelName | String | The name for the additional model | 
| model | Model | The additonal model | 
- Inherited From:
- Source:
afterRender()
- Inherited From:
- Source:
beforeRender()
- Inherited From:
- Source:
createChildComponent(tagName, childTagElement, id) → {Component}
The model attribute is used as a path inside the model object and calls ModelComponent#createChildModelComponent.
Parameters:
| Name | Type | Description | 
|---|---|---|
| tagName | String | The HTML tag name used to place the new child Component in the parent HTML | 
| childTagElement | Node | The HTML element where the new Child will be placed | 
| id | String | The HTML id found in the tag. | 
- Inherited From:
- Source:
- See:
Returns:
- Type
- Component
Example
<!-- How to add a model attribute in the HTML child tag -->
<childcomponent id="child-0" model="items[0]">createChildModelComponent(className, element, id, modelItem) → {Component}
If you have components with different constructors or this policy does not adapt to your needs, you can override this method.
Parameters:
| Name | Type | Description | 
|---|---|---|
| className | String | The class name found in the element | 
| element | Node | The HTML element where the new child will be placed | 
| id | String | The HTML id found in the element. | 
| modelItem | Object | a model object for the new Component. | 
- Inherited From:
- Source:
Returns:
- Type
- Component
getChildComponent(id) → {Component}
Parameters:
| Name | Type | Description | 
|---|---|---|
| id | String | The HTML element id. | 
- Inherited From:
- Source:
Returns:
- Type
- Component
getChildComponents() → {Array.<Component>}
- Inherited From:
- Source:
Returns:
- Type
- Array.<Component>
getChildComponentsById() → {Array.<String, Component>}
- Inherited From:
- Source:
Returns:
- Type
- Array.<String, Component>
getCurrentPage() → {String}
Returns:
- Type
- String
getHtmlNodeId() → {String}
This element will be replaced with the contents of this component renderer function.
- Inherited From:
- Source:
Returns:
- Type
- String
getRouteQueryParam(name)
Note: route query parameters are NOT the standard URL query parameters, which are specified BEFORE the hash.
For example, if the current URL is 'index.html#login?q=1', a call to getRouteQueryParam('q') returns 1.
Parameters:
| Name | Type | Description | 
|---|---|---|
| name | String | The name of the route query parameter. | 
Returns:
getRouterModel() → {Model}
The router contains an internal model where the current page is stored (among those models provided in the constructor). You can obtain this internal model by calling this function.
Returns:
- Type
- Model
goToPage(route)
Parameters:
| Name | Type | Description | 
|---|---|---|
| route | String | The route to go. Example: 'login' | 
onStart()
- Overrides:
- Source:
onStop()
- Inherited From:
- Source:
removeChildComponent(component)
After the child removal, this component will re-render.
Parameters:
| Name | Type | Description | 
|---|---|---|
| component | Component | The child Component. | 
- Inherited From:
- Source:
render()
- Call the renderer function.
- Calculate the differences between the previous "virtual" DOM of this Component and the new "virtual" DOM provided by the renderer function, skipping those elements where child nodes are rendering.
- Patch the previous "virtual" DOM with the previously computed differences, and save it as the next previous "virtual" DOM.
- Patch the real DOM with the previously computed differences.
- Restore the child Components in their new places if they where moved to another part in the DOM.
- Create child nodes if new elements with tag name in
Component#childTags or with fronty-componentattribute are found in the HTML.
- Inherited From:
- Source:
setHtmlNodeId(htmlNodeId)
The element will be replaced with the contents of this component renderer function.
Parameters:
| Name | Type | Description | 
|---|---|---|
| htmlNodeId | String | The HTML node id where this Component will be rendered. | 
- Inherited From:
- Source:
setModel(model)
The component will be re-rendered
Parameters:
| Name | Type | Description | 
|---|---|---|
| model | Model | Array.<Model> | The model(s) to be set. | 
- Inherited From:
- Source:
setRouterConfig(routerConfig)
Parameters:
| Name | Type | Description | 
|---|---|---|
| routerConfig | Object.<String, {component: Component, title: String}> | Mapping of URL hashes to pages. | 
Example
router.setRouterConfig(
{
   login: { //rendered on http://<host>/<page>.html#login
     component: new LoginComponent(), // LoginComponent is a Component
     title: 'Login'
   },
   // more pages
   defaultRoute: 'login'
});start()
A Component need to be started in order to render. If this Component was stopped, it will render. Once this Component has been started and rendered, the onStart() hook is called.
- Inherited From:
- Source:
stop()
Stopped Components do not render. Once this Component
- Inherited From:
- Source:
update(model)
Parameters:
| Name | Type | Description | 
|---|---|---|
| model | Model | The model that has been updated. | 
- Overrides:
- Source:
updateChildComponent()
- Inherited From:
- Source:
Type Definitions
renderer() → {String}
- Inherited From:
- Default Value:
- null
 
- Source:
Returns:
- Type
- String