一个基于轻量级模板库实现的前端组建库javascript
能够像react同样在前端使用组件的方式构建应用
基于一个只有415字节的模板库实现(基于字符串模式)
只暴露几个简单的接口render, mount, setState, trigger.
在渲染的时候,使用闭包将须要的事件或者方法绑定到对应的DOM元素上面html
项目地址 https://github.com/lloydzhou/...
完整的todo mvc示例 https://lloydzhou.github.io/t...前端
<!-- 变量或者表达式取值以后进行替换 --> <h1> {{title}} </h1> <b>{{ encodeURIComponent(title)}}</b> <!-- 下面的js代码会原封不动的被执行,包括if/for --> {% if (messages && messages.length > 0) { %} {% messages.forEach(function(message, index){ %} <!-- 这个地方是生成一个子组件 --> <p>{{sub(messageTmpl, messageMethods, {message: message, index: index})}}</p> {% })%} {% } %} <!-- 将定义的方法add绑定到这个按钮上 --> <button onclick="{{ add() }}">ADD</button>
使用模板,初始化的initState以及须要绑定或者操做的方法以及root节点初始化组件:java
var root = document.getElementById("root") , tmpl = document.getElementById("tpl").innerHTML , initState = {title: 'Demo for mocro javascript template!', messages: ['test demo 1', 'test demo2']}; var app = new tplite.Component(root, tmpl, initState, { view: function(message){ alert(message) }, add: function(message){ var messages = this.state.messages; messages.push('test demo' + (messages.length + 1)) this.setState({ messages, messages }) }, remove: function(index){ var messages = this.state.messages; messages.splice(index, 1) this.setState({ messages, messages }) }, onUpdate: function(){ // will trigger when component render console.log('update', this.state) } })
please see result in "component.html"react
简单来讲,这个模板只提供两种语法:git
这里有一个已知的须要注意的点:
不要在模板中使用单引号,若是必需要使用,请使用转义字符 github
建立一个模板对象闭包
var template = new tplite.Template()
将模板字符串编译成函数mvc
var compile = template("<h1>{{title}}</h1>")
编译以后的模板使用不一样的变量进行渲染,渲染的时候须要使用callback接收输出app
var stringbuffer = new tplite.StringBuffer() compile({title: 'Title !!!'}, stringbuffer) console.log(stringbuffer.toString()) // render template and write to document compile({title: 'Title !!!'}, function(s){document.write(s);})
please see result in "index.html"
Copyright 2014-2017 @Lloyd Zhou
Released under the MIT and GPL (version 2 or later) Licenses.