Files
owl/doc/quick_start.md
T

101 lines
2.3 KiB
Markdown
Raw Normal View History

# 🦉 Quick Start 🦉
2019-06-14 15:24:04 +02:00
## Static Server
Let us assume that we have a static server running somewhere. We could then
simply add an html page with a few extra files.
### HTML and CSS
In a file `index.html`:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>My OWL App</title>
<link href="app.css" rel="stylesheet" />
<script src="owl-X.Y.Z.js"></script>
</head>
<body>
<div id="main"></div>
<script src="app.js" type="module"></script>
</body>
</html>
```
2019-03-14 14:12:51 +01:00
In `app.css`:
2019-03-14 14:12:51 +01:00
```css
button {
color: darkred;
font-size: 30px;
width: 220px;
}
```
2019-03-14 14:12:51 +01:00
Also, let's not forget to add a release of OWL (`owl-X.Y.Z.js`)
2019-03-14 14:12:51 +01:00
### XML
2019-03-14 14:12:51 +01:00
In `templates.xml`:
2019-03-14 14:12:51 +01:00
```xml
<templates>
<button t-name="clickcounter" t-on-click="increment">
Click Me! [<t t-esc="state.value"/>]
</button>
</templates>
2019-03-14 14:12:51 +01:00
```
### JS
2019-03-14 14:12:51 +01:00
To build an application (or a sub-part of an application), we need two things:
2019-03-14 14:12:51 +01:00
- an environment: it is the global context in which we are working. It needs to
contain a QWeb instance (preloaded with templates), and anything else that we
2019-10-17 09:50:03 +02:00
need. In practice, it could be used to contain some user session information, some
configuration keys (for example, isMobile = true/false if we are in mobile mode).
2019-03-14 14:12:51 +01:00
- a description of the user interface: there should be a root component, which can
have sub components
2019-03-14 14:12:51 +01:00
Here are a few steps that we may take to get started:
2019-03-14 14:12:51 +01:00
- get the templates
- create a qweb engine, with the templates
- create an environment
- create an instance of the root component
- mount the root component to a DOM element
2019-03-14 14:12:51 +01:00
Let us now add the javascript to make it work, in `app.js`:
2019-03-14 14:12:51 +01:00
```javascript
2019-09-24 14:06:53 +02:00
const useState = owl.hooks.useState;
class ClickCounter extends owl.Component {
2019-09-12 09:45:32 +02:00
static template = "clickcounter";
2019-10-17 09:50:03 +02:00
state = useState({ value: 0 });
increment() {
this.state.value++;
}
}
//------------------------------------------------------------------------------
// Application initialization
//------------------------------------------------------------------------------
async function start() {
const templates = await owl.utils.loadFile("templates.xml");
const env = {
qweb: new owl.QWeb({ templates })
};
const counter = new ClickCounter(env);
const target = document.getElementById("main");
await counter.mount(target);
}
start();
2019-03-14 14:12:51 +01:00
```