-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathserver-rendered.html
46 lines (40 loc) · 1.51 KB
/
server-rendered.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Server-rendered page</title>
</head>
<body>
<!-- the output itself -->
<div data-bind="greeting" data-context='{"name":"world"}'>
<h1>Hello, world!</h1>
<input value="world">
</div>
<!-- the embedded template -->
<template class="magery-templates">
<div data-template="greeting" data-embed="true">
<h1>Hello, {{name}}!</h1>
<input value="{{name}}" oninput="updateName(event)">
</div>
</template>
<!-- our javascript -->
<script src="../build/magery.min.js"></script>
<script>
// load templates from all .magery-templates elements on page
var templates = Magery.compile('.magery-templates');
// find output rendered by server
var element = document.querySelector('[data-bind=greeting]');
// parse embedded context data from the element
var data = JSON.parse(element.getAttribute('data-context'));
// bind template to all elements with data-bind='greeting' attribute
templates['greeting'].bind({
updateName: function (event) {
data.name = event.target.value;
Magery.patch(templates, 'greeting', data, element);
}
});
// set up initial event handlers
Magery.patch(templates, 'greeting', data, element);
</script>
</body>
</html>