2019-10-30 10:22:59 +01:00
|
|
|
# 🦉 Environment 🦉
|
|
|
|
|
|
|
|
|
|
An environment is an object which contains a [`QWeb` instance](../reference/qweb.md).
|
|
|
|
|
Whenever a root component is created, it is assigned an environment (see the
|
|
|
|
|
reference section on [environment](../reference/environment.md). This environment
|
|
|
|
|
is then automatically given to each sub components (and accessible in the `this.env` property).
|
|
|
|
|
|
|
|
|
|
The environment is mostly static. Each application is free to add anything to
|
|
|
|
|
the environment, which is very useful, since this can be accessed by each sub
|
|
|
|
|
component.
|
|
|
|
|
|
|
|
|
|
Some good use cases for the environment is:
|
|
|
|
|
|
|
|
|
|
- some configuration keys,
|
|
|
|
|
- session information,
|
|
|
|
|
- generic services (such as doing rpcs, or accessing local storage).
|
|
|
|
|
|
|
|
|
|
Doing it this way means that components are easily testable: we can simply
|
|
|
|
|
create a test environment with mock services.
|
|
|
|
|
|
|
|
|
|
For example:
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
async function myEnv() {
|
2019-10-31 21:28:35 +01:00
|
|
|
const templates = await loadTemplates();
|
|
|
|
|
const qweb = new QWeb({ templates });
|
|
|
|
|
const session = getSession();
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
_t: myTranslateFunction,
|
|
|
|
|
session: session,
|
|
|
|
|
qweb: qweb,
|
|
|
|
|
services: {
|
|
|
|
|
localStorage: localStorage,
|
|
|
|
|
rpc: rpc
|
|
|
|
|
},
|
|
|
|
|
debug: false,
|
|
|
|
|
inMobileMode: true
|
|
|
|
|
};
|
2019-10-30 10:22:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function start() {
|
2019-10-31 22:45:22 +01:00
|
|
|
App.env = await myEnv();
|
2019-10-31 21:28:35 +01:00
|
|
|
const app = new App();
|
|
|
|
|
await app.mount(document.body);
|
2019-10-30 10:22:59 +01:00
|
|
|
}
|
2019-10-31 21:28:35 +01:00
|
|
|
```
|