最近的code jam中用到了百度王集鹄大侠开发的ace-engine。用了一下ace-event和ace-template。非常好用,这里介绍一下。
ace-event实际上是一个浏览器事件的代理。
我们首先来看一个简单例子。你的页面上有一个登陆按钮,按下去以后按钮演示要变,同时弹出登陆对话框。还有一个普通的链接,不需要变化样式,点击同样要出现对话框。我们在实现功能的时候可能会这样做:
1.声明弹出对话框的函数。
2.给按钮的绑定click事件,先改变样式,再调用对话框函数。
3.阻止链接的默认行为,调用对话框函数。
这种做法的缺点是:
1.逻辑与样式混合,当页面效果复杂了以后代码会混乱。
2.页面元素如果出现id之类用作选择器的属性变化,代码也需要变动。当新增时,代码中也需要再次绑定。
ace-event能做的就是将显示与业务逻辑分离。具体的方法如下:(以下步骤中的Event对象并不是ace-event的一部分,需要自己另外实现。)
1.约定好整个系统中的事件名称,通过一个全局的Event对象来注册和触发事件,各个模块之间监听自己的感兴趣的事件。如用户模块监听login事件。并执行回调。
Event.on("login", module_user.login);
2.在页面元素上使用"cmd='login'"来表示点击会要触发的事件。
3.在表示层中使用ace-event来监听cmd指向的事件,进行页面的渲染,然后再抛出逻辑层事件。如
AceEvent.on(selector_id, function(command, target){ //这里的target就是被点击的元素 //command就是该元素上绑定的命令 //在这里进行页面的渲染 //同时抛出逻辑层事件,如: Event.fire("login"); });
这种做法相对于backbone等大的mvc来说优点在于简洁,性能高。
ace-template就不详述了,相对于其他前端模板它的有点在于js和html可以随意混合编写,不需要类似于"<%"的语法分隔符。很强大。