simple server side rendering demo
This commit is contained in:
parent
b403e6dbbf
commit
2dd19ae6d0
|
@ -0,0 +1,25 @@
|
|||
var koa = require('koa');
|
||||
var serve = require('koa-static');
|
||||
var router = require('koa-route');
|
||||
var app = koa();
|
||||
var jsdom = require('jsdom');
|
||||
var Nuclear = require("alloynuclear")(jsdom.jsdom().defaultView);
|
||||
|
||||
var Todo = require('./component/todo')(Nuclear,true);
|
||||
|
||||
var ejs = require('ejs');
|
||||
|
||||
|
||||
app.use(serve(__dirname + '/component'));
|
||||
|
||||
app.use(router.get('/todos', function *(){
|
||||
var str = require('fs').readFileSync(__dirname + '/view/index.html', 'utf8');
|
||||
var todo = new Todo({ items: ["Nuclear","koa",'ejs'] });
|
||||
this.body = ejs.render(str, {
|
||||
todo: todo.HTML
|
||||
});
|
||||
Nuclear.destroy(todo);
|
||||
}));
|
||||
|
||||
|
||||
app.listen(3000);
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,31 @@
|
|||
function todo(Nuclear,server) {
|
||||
var Todo = Nuclear.create({
|
||||
add: function (evt) {
|
||||
evt.preventDefault();
|
||||
this.option.items.push(this.textBox.value);
|
||||
},
|
||||
render: function () {
|
||||
return `<div>
|
||||
<h3>TODO</h3>
|
||||
<ul> {{#items}} <li>{{.}}</li> {{/items}}</ul>
|
||||
<form onsubmit="add(event)" >
|
||||
<input nc-id="textBox" type="text" />
|
||||
<button>Add #{{items.length}}</button>
|
||||
</form>
|
||||
</div>`;
|
||||
},
|
||||
style: function () {
|
||||
return `h3 { color:red; }
|
||||
button{ color:green;}`;
|
||||
}
|
||||
},{
|
||||
server:server
|
||||
});
|
||||
return Todo;
|
||||
}
|
||||
|
||||
if ( typeof module === "object" && typeof module.exports === "object" ) {
|
||||
module.exports = todo ;
|
||||
} else {
|
||||
this.todo = todo;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"alloynuclear": "^0.2.12",
|
||||
"ejs": "latest",
|
||||
"koa": "latest",
|
||||
"koa-route": "latest",
|
||||
"jsdom":"latest",
|
||||
"koa-static": "latest"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head lang="en">
|
||||
<meta charset="UTF-8">
|
||||
<title></title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="todo"><%- todo%></div>
|
||||
|
||||
<div id="aa"></div>
|
||||
<script src="./nuclear.js"></script>
|
||||
<script src="./todo.js"></script>
|
||||
<script>
|
||||
|
||||
var Todo= todo(Nuclear);
|
||||
//绑定事件、处理样式
|
||||
new Todo('#todo');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue