老实交代,我是来推广框架的。
是的,我实现了一个 SPA 框架,她非常简洁,没有融入或实现诸如 Templates、View binding、Animation 等技术或特性,因为我相信诸如这些技术有很多成熟方案供你选择,且萝卜白菜各有所爱,且前辈们已经做的很好,我没必要重复发明轮子,如果你也跟我一样喜欢简洁的东西,欢迎尝试。
特性
- 低侵入性;
- 页面生命周期 Callback 支持(refer Android、iOS);
- SEO 友好(当然这需要您 Server-side render);
- 简单 Logic Expression 支持(下文有示例);
- 代码 Lazy load;
- Page 多实例,如:detail 页面;
- 支持简单的触发器;
- LRU Histories 的维护机制;
- Single page 重新载入支持(按需);
- 可以更方便的访问 Query strings;
- 代码约 15KB,如果您启用 gzip 会更理想;
开始尝试?
1: 准备你的环境
- Server:
Ngingx OR Apache
- Zepto 基础库需要引入
2: 定义 page model
重要提示:
- Page 的根级 DOM 都要添加 "page-ui" class。
- 如果你没有明确调用 render 方法在 onCreateView() 中,那么框架会发起 XHR 请求去获取 Page view 基于当前的 path。
$Page.define('you.path.name', {
title: 'You first page',
// 这里可以预定义 Page 的 View
html: '<div class="page-ui">' +
'<h1>Hello</h1>' +
'<a class="xfly-page__nav" href="you/other/page">Go to the Next page</a>' +
'</div>',
onCreateView: function() {
// 调用 rander 方法可以灵活组织你的 Page view
// this.render( { url / html: '' } );
},
onRendering: function() {
},
onRendered: function() {
// 通过更简便的方式访问 Query strings
var args = this.getArgs();
console.log( 'The key value is ' + args[ 'key' ] );
},
onResume: function () {
console.log( this.id + ' be resumed.' );
},
onPause: function () {
console.log( this.id + ' be paused.' );
}
});
2: 导航
前进:
<a class="xfly-page__nav" href="you/other/page">下一个页面</a>'
前进配合 Logic Express 使用:
- 比如以下场景,根据用户登录的状态,要用到两个页面,现在通过 Logic Expression 来配置便可达到预期的目的;
- 语法是: <a data-if="condition" href="target_1" data-else-href="target_2">Link</a>, 对就是 if () {} else {};
<a class="xfly-page__nav" data-if="hasMember" href="member/engagement" data-else-href="member/not/engagement">查看会员状态</a>
OR
go( 'you.other.page' );
后退:
<a class="xfly-page__back" href="">上一个页面</a>'
OR
back();
3: 差不多了
是否简洁?欢迎各位专家吐槽。
Demo
在线 c-ong.github.io 或 示例代码目录.
源码
License
Licensed under the MIT license.