seajs2.3学习日志 简单尝试模板+数据合并、模块异步加载、非标准CMD模式定义define模块

今天继续尝试seajs 2.3的版本,那做点什么demo好呢,就来一个简单是数据模板吧,然后通过其他一些细节深入学习

先看看目录结构,按照官方demo架设

index.html只是简单入口文件和seajs的配置项,最下面有一个seajs.use加载crontroller模块,然后回调暴露的combine方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>halo sea.js</title>
		<script type="text/javascript" src="../sea-modules/sea.js"></script>
	</head>
	<body>
		<div id="hello"></div>
	</body>
</html>
<script type="text/javascript">
seajs.config({
	base : "../sea-modules/",
	alias : {
		"jquery" : "jquery.js"
	}
});

seajs.use("../static/crontroller", function(c){
	console.log(c.combine());
});
</script>

crontroller模块,里面有一些官方的说明和调试,试用了require.async异步加载、require方式加载其他模块(数据和模板module)、如何成功加载非CMD标准定义模块

define(function(require, exports, module) {

	/* 使用模块系统内部的路径解析机制来解析并返回模块路径。
	 * 该函数不会加载模块,只返回解析后的绝对路径 */
	// console.log( require.resolve("./data.js") );

	// console.log( module.id );
	// console.log( module.uri );

	// exports 是 module.exports 的一个引用
 	// console.log(module.exports === exports);

 	// 重新给 module.exports 赋值(继承)
	// module.exports = new SomeClass();

	// exports 不再等于 module.exports
 	//console.log(module.exports === exports);

 	/* dependencies 是一个数组,表示当前模块的依赖 */
 	// console.log(module.dependencies);

 	/* 异步加载模块,当加载多个模块可使用数组形式[‘./a‘,‘./b‘] */
 	require.async(‘./async‘);

 	var data = require(‘./data‘);
 	var temp = require(‘./temp‘);

 	/* 终于能够加载 */
 	var halo = require(‘./hello‘);
 	console.log(halo);

 	exports.combine = function() {
 		return temp.replace("{{name}}", data.name);
 	};
});

data模块,尝试了在同一份文件定义多个define,结果后者会覆盖前者!

如果之后项目优化需用到合并js文件解决http链接数问题,看看官方seajs-combo插件和官方解析module.id和module.uri的说明可能会更加清晰

define({name:"jack"});

/* 估计内部会判断参数类型,当是function类型就执行,
 * 然后将返回结果绑到exports对象上,与exports.name = "jack"效果一样;
 * 只是写法不一样
 */
/*
define(function(require) {
	return {
		name : "jack"
	};
});
*/

/* 同一份文件不能同时存在多个define */
/* 否则后者的定义会覆盖前者 */
// define({interest:"games"});

temp模块

define("halo, My name is {{name}}");

async模块

define(function(require, exports, module) {
	console.log("异步加载的模块!所以你最后才能看到我");
});

hello模块,这里主要是非标准模式下定义模块注意

1、id和deps的细节,开始在这里绕了一下,如果module.id与module.uri不一致会导致其他模块加载失败

2、deps数组定义了依赖的模块并接管require(path)路径加载模块方式,如果不在这里声明,模块内部是不能通过路径和别名成功加载其他依赖模块

更详细说明看 https://github.com/seajs/seajs/issues/930

/* id 和 dependencies 参数可以省略。省略时,可以通过构建工具自动生成。 */
/* 带 id 和 deps 参数的 define 用法不属于 CMD 规范,而属于 Modules/Transport 规范 */
/* https://github.com/seajs/seajs/issues/930 在这里能够更好理解ID作用 */
define(‘../static/hello‘, [‘jquery‘], function(require, exports, module) {

	/* 当使用这种id和deps的方式时,dependencies会接管所有模块依赖 */
	/* 所以下面这种按照以往加载其他模块将会失败,返回null */
	var o = require(‘./other‘);
	console.log(o);//null

	/* 在deps中声明加载,所以能够正确获取jq对象 */
	var j = require(‘jquery‘);
	console.log(j);

	exports.halo = function() {
		return "halo my friends";
	};
});

other模块

define({
	name : "other module",
	varsion : "1.0.1"
});

最终执行结果,在firefox的控制台下

时间: 2024-10-06 00:11:28

seajs2.3学习日志 简单尝试模板+数据合并、模块异步加载、非标准CMD模式定义define模块的相关文章

【JAVAWEB学习笔记】网上商城实战2:异步加载分类、Redis缓存分类和显示商品

网上商城实战2 今日任务 完成分类模块的功能 完成商品模块的功能 1.1      分类模块的功能: 1.1.1    查询分类的功能: 1.1.2    查询分类的代码实现: 1.1.2.1  创建表: CREATE TABLE `category` ( `cid` varchar(32) NOT NULL, `cname` varchar(20) DEFAULT NULL, PRIMARY KEY (`cid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 1

简单的ListView中item图片异步加载

前言: 在android开发当中,从目标地址获取图片往往都是采用异步加载的方法.当完全加载完图片后在进行显示,也有些是直接将加载的图片一点一点的显示出来. 这两个区别只是对流的处理不同而已.现在就讲讲当图片被完全获取到后在显示的方法. 一,效果图:       初始化:                                                   获取后:                         1.1,效果思路: 初始化的时候默认ImageView显示一张白色的图

【EasyUI学习-2】Easyui Tree的异步加载

作者:ssslinppp       1. 摘要 easyui相关的介绍可以上其官网或者百度去搜索,这里不做介绍. Easyui Tree的使用,官网或者easyui中文网站,也有相关介绍,但是官方提供的实例所使用的json是写死的,不是后台实时读取的.在实际的项目中,要显示的tree数据,一般都是从数据库中读取,然后通过通过ajax或者其他技术将tree的json数据发送到前台,然后显示. 本文将介绍easyui tree的异步加载,以及手动展开tree. 2. tree的相关介绍 上图是一个

Android-搭建简单服务端+ListView异步加载数据

Android-搭建简单服务端+ListView异步加载数据 2014年5月6日 本篇博文带给大家的是教大家如何在MyEclipse中搭建一个服务端,并通过手机端与其通信,异步加载数据. 笔者使用的是MyEclipse,各位也可以直接用Eclipse创建Java Web项目,谷歌提供的ADT Bundle是不能创建Web项目,读者可以下载Eclipse For JaveEE Developer这个IDE. 下面来介绍如何在MyEclipse创建一个Web项目,并部署到Tomcat当中,关于Tom

Android异步加载学习笔记之一:用AsyncTask加载服务器json数据

我们知道在Android开发中,UI主线程不能执行耗时太久的操作,Activity一般是不超过5s,BroadCaseReceiver一般不超过10s,因为这些耗时操作不仅仅阻塞UI线程操作,还可能导致用户不想见到的ANR,所以我们需要使用异步操作. 我们通常用的异步操作有两种方式: 1:多线程或线程池异步加载, 2,AsyncTask异步任务操作(底层也是用的线程池). 数据来源于慕课网:json数据地址:http://www.imooc.com/api/techer?type=4&num=3

VSTO学习笔记(三) 开发Office 2010 64位COM加载项

原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(Automation Executables) 2.Office加载项(COM or Excel Add-In) 3.Office文档代码或模板(Code Behind an Office Document or Template) 4.Office 智能标签(Smart Tags) 本次我们将学习使

Android利用Volley异步加载数据完整详细示例(二)

MainActivity如下: package cc.y; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.os.Bundle; import android.util.LruCache; import android.widget.ImageView;

Android利用Volley异步加载数据完整详细示例(一)

MainActivity如下: package cc.cn; import java.util.HashMap; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.os.Bundle; import com.android.volley.AuthFailureError; import com.android.volley.RequestQ

淘宝购物车页面 智能搜索框Ajax异步加载数据

如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区非常的活跃,许多朋友都在不同地方分享了很多优秀的插件.我在相关的网站上找过想实现类似功能的插件,但是没有找到.于是乎,自己动手丰衣足食.自己来搭建智能搜索框下拉列表.当然,如果有类似功能并且常维护Bug的插件,望留言交流. 源码地址: 淘宝购物车页面--PC端和移动端项目实战 首先需要先给大家打一根