为什么使用sea.js?

Sea.js 追求简单、自然的代码书写和组织方式,具有以下核心特性:

  • 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像Node.js 一般书写模块代码。
  • 自然直观的代码组织方式:依赖的自动加载、配置的简洁清晰,可以让我们更多地享受编码的乐趣。

Sea.js 还提供常用插件,非常有助于开发调试和性能优化,并具有丰富的可扩展接口。

兼容性

Sea.js 具备完善的测试用例,兼容所有主流浏览器:

  1. Chrome 3+         ✔
  2. Firefox 2+        ✔
  3. Safari 3.2+       ✔
  4. Opera 10+         ✔
  5. IE 5.5+           ✔

Sea.js 可运行在 Mobile 端,包括 Hybrid 模式的 App 上。理论上,Sea.js 可以运行在任何浏览器引擎上。

下面我用一个简单示例来开启sea.js的模块化开发之旅:

目录结构:

hello.html文档代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>测试sea.js的API</title>
  6. <style>
  7. #container{
  8. width:200px;
  9. height: 200px;
  10. margin: 0 auto;
  11. border: 1px solid #669991;
  12. }
  13. .init{
  14. background-color: #ff6600;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <div id="container"></div>
  20. <script src="../sea-modules/seajs/2.2.0/sea.js"></script>
  21. <script>
  22. // seajs 的简单配置
  23. seajs.config({
  24. // Sea.js 的基础路径
  25. base:"../sea-modules/",
  26. // 设置别名,方便调用
  27. alias:{
  28. "jquery":"jquery/jquery/1.10.1/jquery.js"
  29. }
  30. });
  31. //for 开发阶段
  32. if(location.href.indexOf("?dev")>0){
  33. //加载一个main.js模块
  34. seajs.use("../static/hello/src/main");
  35. }
  36. //for上线阶段
  37. else{
  38. //加载一个main.js模块
  39. seajs.use("examples/hello/1.0.0/main");
  40. }
  41. </script>
  42. </body>
  43. </html>

main.js的代码:

  1. //定义一个模块
  2. define(function(require){
  3. //获取start.js的接口
  4. var Start=require('./start');
  5. //生成Start的实例
  6. var s=new Start('#container');
  7. //调用Start的方法
  8. s.render();
  9. });

start.js的代码:

  1. define(function(require,exports,module){
  2. //获取jQuery的接口
  3. var $=require('jquery');
  4. //定义名为Start的构造函数对象
  5. function Start(container){
  6. this.container=$(container);
  7. }
  8. //对外提供接口
  9. module.exports=Start;
  10. //定义Start对象的原型方法
  11. Start.prototype.render=function(){
  12. this._init();
  13. this.container.css('border','5px solid #f00');
  14. };
  15. Start.prototype._init=function(){
  16. this.container.addClass('init');
  17. return this;
  18. }
  19. });

示例效果如下:

最新文章

  1. C# 条形码操作【源码下载】
  2. [Centos 6]升级安装GCC(2)
  3. MVVM开发模式简单实例MVVM Demo
  4. lua 自己编译源文件
  5. 【BZOJ-2502】清理雪道 有上下界的网络流(有下界的最小流)
  6. ECSHOP去版权标志删除Powered by ECShop(转)
  7. Bootstrap 3 How-To #3 布局
  8. wuzhicms 查看模板中的所有可用变量和值
  9. FPGA DDR3调试
  10. Android安全专项-利用androguard分析微信
  11. Office Add-in 设计规范与最佳实践
  12. egg.js 的优缺点
  13. Python入门(青铜篇)
  14. uwp 动画Storyboard
  15. ZKWeb网页框架2.1正式发布
  16. luogu 1850 换教室 概率+dp
  17. 转载------------C函数之memcpy()函数用法
  18. root权限使用vim不能修改权限
  19. XtraEditors一、总体介绍
  20. C/C++预处理指令

热门文章

  1. java中的向下转型
  2. Hbase- Hbase客户端读写数据时的路由流程
  3. ios 获取导航栏和状态栏高度,针对iPhoneX
  4. 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink——flink支持SQL,待看
  5. java学习笔记 --- 多线程(线程安全问题——同步代码块)
  6. Incorrect string value: &#39;\xE7\x8E\x8B\xE4\xBD\xB3&#39; for column &#39;contact&#39; at row 1
  7. 2018.7.30 Designing a Qi-compliant receiver coil for wireless power systems
  8. 2017.12.15 python资料,转存一下。
  9. BZOJ - 3123 森林 (可持久化线段树+启发式合并)
  10. UVA - 11212 Editing a Book (IDA*)