ndoojs支持块级组件,通过标签上的属性载入组件并自动执行。
1.页面中上添加组件标识
<div id="testBlock" data-nblock-id="test/main?abc=1"></div>
组件会被自动实例化,如果希望组件在后面手动运行,需要设置一行属性 data-nblock-auto="false"。
2.定义模块
file: ndoo.block.test.js
_n.block('test.main', {
init: function(elem, params){
console.log('init test block');
}
});
block的值可以是一个函数或者对象,如果为对象则会尝试调用init入口函数,如果为函数则直接被调用。
3.自动加载
3.1 引入do.js以及模块定义文件 此处用到了事件系统,参见event。
<script src="lib/Do.js"></script>
3.2 定义依赖
(function(){
var _n;
this.N = this.ndoo || (this.ndoo = {});
_n = this.ndoo;
Do.define('test.main', {
path: currJsPath + '/ndoo.block.test.js',
type: 'js'
});
_n.on('NBLOCK_DEFINE', function(){
_n.setBlock('test.main');
});
}).call(this);
4.完整代码如下:
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>example</title>
</head>
<body>
<div id="testBlock" data-nblock-id="test/main?abc=1"></div>
<p id="content"></p>
<div id="scriptArea" data-page-id="home/index">
<script src="lib/underscore-min.js"></script>
<script src="lib/jquery-2.1.1.min.js"></script>
<script src="lib/Do.js"></script>
<script src="js/ndoo_all.js"></script>
<script>
(function(){
var _n;
this.N = this.ndoo || (this.ndoo = {});
_n = this.ndoo;
Do.define('test.main', {
path: currJsPath + '/ndoo.block.test.js',
type: 'js'
});
_n.on('NBLOCK_DEFINE', function(){
_n.setBlock('test.main');
});
_n.init();
}).call(this);
</script>
</div>
</body>
</html>
ndoo.block.test.js
(function(){
'use strict';
var _, $, _n, _vars, _func, _stor;
_ = this['_'];
$ = this['jQuery'] || this['Zepto'];
this.N = this.ndoo || (this.ndoo = {});
_n = this.ndoo;
_vars = _n.vars;
_func = _n.func;
_stor = _n.storage;
_n.block('test.main', {
init: function(elem, params){
console.log('init test block');
}
});
/* vim: se ts=2 sts=2 sw=2 fdm=marker cc=80 et: */
}).call(this);
5.执行多个block
在某些特定情况,我们需要运行多个block,但并不对应具体的dom。这个时候可以在一个空div上面设置多个block id来实现。多个block id之间使用空格区分。示例:
<div id="blockElement" data-nblock-id="ui/loading ui/back2top"></div>
ui/loading ui/back2top 会依次执行