[no320.com]自己动手写一个phonegap/cordova里的domready

 

修改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;
	    
	}();
});


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值