2
0
mirror of https://github.com/frappe/books.git synced 2025-01-27 00:58:35 +00:00
books/docs/client/router.md

68 lines
1.4 KiB
Markdown
Raw Normal View History

2018-01-10 18:19:52 +05:30
# Client-side Routing
The Frappe.js client comes in with a built in router, that is handles via hashing (example `#route`)
2018-01-31 15:43:33 +05:30
## Adding new route handlers
2018-01-10 18:19:52 +05:30
You can add a new route by calling `frappe.router.add`
Dynamic routes can be added by declaring each parameter as `:param` in the route string (similar to express.js)
### Example
```js
2018-01-16 11:39:17 +05:30
const Page = require('frappejs/frappe/client/view/page').Page;
2018-01-10 18:19:52 +05:30
let todo_list = new Page('ToDo List');
// make the current page active
todo_list.show();
// to do list
frappe.router.add('default', () => {
2018-02-08 17:58:51 +05:30
todo_list.show();
todo_list.list.run();
2018-01-10 18:19:52 +05:30
});
// setup todo form
frappe.router.add('edit/todo/:name', async (params) => {
app.doc = await frappe.get_doc('ToDo', params.name);
app.edit_page.show();
app.edit_page.form.use(app.doc);
});
// setup todo new
frappe.router.add('new/todo', async (params) => {
app.doc = await frappe.get_doc({doctype: 'ToDo'});
app.doc.set_name();
app.edit_page.show();
app.edit_page.form.use(app.doc, true);
});
```
2018-01-31 15:43:33 +05:30
## Setting route
You can change route with
```js
2018-02-08 17:58:51 +05:30
await frappe.router.setRoute('list', 'todo');
2018-01-31 15:43:33 +05:30
```
## Getting current route
2018-02-08 17:58:51 +05:30
`frappe.router.getRoute()` will return the current route as a list.
2018-01-31 15:43:33 +05:30
```js
2018-02-08 17:58:51 +05:30
await frappe.router.setRoute('list', 'todo');
2018-01-31 15:43:33 +05:30
// returns ['list', 'todo'];
2018-02-08 17:58:51 +05:30
route = frappe.router.getRoute();
2018-01-31 15:43:33 +05:30
```
2018-01-10 18:19:52 +05:30
## Show a route
To set a route, you can call `frappe.router.show(route_name)`
```js
frappe.router.show(window.location.hash);
```