Component¶
-
class
Component¶ A Component controls the appearance and elements inside a patch of the screen
It can render the elements programatically or directly with html content
Attributes:
bindings ({}):A dictionary containing the name and default value of attributes for the class which will also automatically add bound
ObservablesThe observables will have a
_(underscore) character appended.Setting the value of the attribute will trigger the observable and therefore any actions/subscriptions associated with it. Example:
bindings = {‘myattr’: ‘myvalue’}
will create:
An attribute
myattrwhich defaults tomyvalueAn observable
myattr_
services ({}):A dictionary containing the name and service class for services defined for this and any child component of it
services = {‘myservice’: MyService}
service_ns (False):If
False, services will be added as direct attributes of the instance with the name specified in theservicesdeclaration.If
service_nsis:True: the declaredserviceswill be reachable under the attributeself._s.myserviceThis is meant to separate the services from the rest of the attributes.
A
string, the declaredserviceswill be reachable under the attributeself.{value of the string}.myservice. I.e.: for a value ofservices_here, then a service would be reachable as:self.services_here.myservice
routerAttribute which points to the router instance in charge of the application
routeAttribute which contains the current active route snapshot
selector (None)The selector is the name of the html tag under which the component is rendered and controls elements.
If
None, the name will be automatically derived from the name of the classhtmlpath (True)Path to a file containing the html content.
If
Truethe name of the file will be derived automatically from the class name, i.e.: MyComponent -> my_component.html. In this case the file has to be placed at the same level in the file hierarchy as the python module in which the component class is defined.To derive the name: underscores will be placed in the upper/lower-case boundaries, everything will be lowercased and the extension
.htmlwill be appended.If it contains a name (string), this will be used to fetch the file from the server (or from a virtual file system if the app is delivered as a package)
This takes precedence over the
rendermethod.After loading, the
rendermethod will be called with the node under which the content has been loadedhtmlsheet (None)This takes precedence over ``htmlpath``.
If not
None, this will then contain html content in text format, which will be used to render the patchIf
None, the name will be automatically derived from the name of the class.After loading, the
rendermethod will be called with the node under which the content has been loadedstylepath (True)Path to a file containing the style sheet.
If
Truethe name of the file will be derived automatically from the class name, i.e.: MyComponent -> mycomponent.css. In this case the file has to be placed at the same level in the file hierarchy as the python module in which the component class is definedTo derive the name: underscores will be placed in the upper/lower-case boundaries, everything will be lowercased and the extension
.csswill be appended.If it contains a name (string), this will be used to fetch the file from the server (or from a virtual file system if the app is delivered as a package)
This takes precedence over the
stlyermethod.After loading, the
htmlmethod will be called with the node under which the content has been loadedstylesheet (None)If not
None, this will then contain a style sheet in text format, which will be used to control the styles of the elements rendered by the componentThis takes precedence over ``stylepath``
cachesheets (True)If
True, loaded html content and style sheets will be cached, rather than fetched againcacheable (True)If
True, the component will not be destroyed and recreated each time. Setting it toFalseforces destruction and recreation
-
render(node)¶ Render programmatically or manipulate loaded html content.
If
htmlsheetorhtmlpathare defined, this method will be called after the html content has been loaded. The content lives under node.In any other case the method is expected to either:
render the html content programmatically
or
return text content which will be the html content to be added to the DOM
The parameter
nodeis the DOM element under which either the loaded html content can be found or under which the programmatic rendering or returned text will be inserted.
-
styler()¶ Override this method to return the css to apply to the component. The returned format is just plain text
-
loading()¶ If the method
loadis not overridden, this will be called when the component is about to be loaded to the DOM
-
unloading()¶ If the method
loadis not overridden, this will be called when the component is about to be unloaded from the DOM
-
load(loading=True)¶ Called when the component is being loaded/unloaded to/from the DOM
If not overridden, it will
call self.loading() when
loading=Truecall self.unloading() when
loading=False
-
classmethod
selector_render(*args, **kwargs)¶ Used for rendering inside another component
-
can_deactivate()¶ Override this method to disallow navigating away from this component (and the associated route)
Returns:
True/Falseor anObservablewhich will deliver those values.If the final evaluated value is
Truenavigating away is allowed
-
close_outlet()¶ To be used to navigate away from the component when it is loaded in a named outlet
-
class
ComponentInline¶ This is a simple subclass of
Componentwhich defineshtmlpath=Noneandstylepath=Nonefor components that don’t have external html and css resources