修改cordova。*。js
首先要去掉1) ;(function(){
2) })();
cordova的所有javascript内容都在此命名空间中,若不打开,如require,define等功能是无法使用的。
在01.test_define_and_require_method.html中
<script type="text/javascript" charset="utf-8" src="../lib/scripts/cordova-1.7.0.no320.js"></script>
<script type="text/javascript">
define("no320/test", function(require, exports, module) {
/**
* Creates a test function used to test define and require method
*
* @private
*/
module.exports = function() {
alert('看吧,define and require method好用了,你可以定义自己cordova plugin');
};
});
var firsttest = require('no320/test');
firsttest();
</script>
当然,如果你不想依赖这么多东西,可以把
<script type="text/javascript" charset="utf-8" src="../lib/scripts/require.js"></script>
@see 01.test_define_and_require_method_single.html
关于domready
domready是body加载完成。一般页面操作都要在所有页面元素加载完成才操作的,典型的如jQuery的domready事件。
等到加载完成之后才做操作的原因是:只有元素在页面内才会
//第一种方式:常规方式
var domready = require('no320/domready');
domready(function(){
alert("INFO: <body onload> 已加载完成");
});
// 第二种方式:使用别名
window.$ = require('no320/domready');
$(function(){
alert("INFO: <body onload> 已加载完成");
});
@see 02.domready.html
关于AMD规范里的种种
关于module.exports
- 第一种情况
只是返回一个函数的情况:
module.exports =function () {
console.log("INFO: <body onload> 已加载完成");
return ready;
}();
这样的写法的调用
var a = require('aa/test');
a();
- 第二种情况
可以返回多个函数,这是=之后是一个对象,不能是函数,否则就会报错
module.exports ={
on : function( obj, type, fn ) {
obj.addEventListener( type, fn, false );
}
};
这样的写法的调用
var a = require('aa/test');
a.on();
一般第二种方式用途会比较广。
源码
define("no320/domready", function(require, exports, module) {
/**
* Creates a domready event function used to callback when page onload
*
* @private
*/
function addEvent( obj, type, fn ) {
obj.addEventListener( type, fn, false );
}
module.exports =function () {
function ready( f ) {
if( ready.done ) return f();
if( ready.timer ) {
ready.ready.push(f);
} else {
addEvent( window, "load", isDOMReady );
ready.ready = [ f ];
ready.timer = setInterval(isDOMReady, 13);
}
};
function isDOMReady() {
if( ready.done ) return false;
if( document && document.getElementsByTagName && document.getElementById && document.body ) {
clearInterval( ready.timer );
ready.timer = null;
for( var i = 0; i < ready.ready.length; i++ ) {
ready.ready[i]();
}
ready.ready = null;
ready.done = true;
}
}
console.log("INFO: <body onload> 已加载完成");
return ready;
}();
});