## 初始化

在默认情况下，Mobilebone 是自动初始化的，初始化的时机在 DOMContentLoaded 之后。

初始化做了这么几件事情：

- 根据当前 URL 地址中的路由信息，显示或者加载对应的页面；如果没有任何路由信息，则让第一个匹配 `Mobilebone.classPage` 的元素显示。
- 给页面文档全局委托 `'click'` 事件，对所有的 `<a>` 元素进行劫持处理。
- 一些兼容性处理；

在某些场景下，DOMContentLoaded 之后自动初始化是有问题的。

### 手动设置

Mobilebone 初始化的时候，在对应页面显示的同时，会有完整的页面显示逻辑的执行，这个显示逻辑的执行会动用大量的 Mobilebone 参数，以及触发部分的生命周期函数的执行。

如果 Mobilbebone 的参数设置必须依赖于异步返回的数据，或者生命周期函数中的某些代码有其他依赖，自动执行 `Mobilebone.init()` 的时机就不对，导致参数传入滞后、或者函数无法顺利执行。这些场景就需要开发者自己手动进行 Mobilebone 的初始化，方法如下：

1. 设置 `Mobilebone.autoInit` 的值为 `false`；
2. 在合适的位置执行 `Mobilebone.init()`。

例如，indexDB 存储是异步过程，在 Mobilebone 初始化之前需要先从本地数据库中读取一些数据，则就需要在 indexDB 存储的数据获取之后再进行 Mobilebone 的初始化。

以 localforage 这个本地存储工具示意：

在页面外设置：

    Mobilebone.autoInit = false;

业务代码中：

    localforage.getItem('someId', function (err, value) {
        if (err == null && value) {
            // 使用value干嘛干嘛，然后初始化
            Mobilebone.init();
        }
    });

以及，如果 Mobilebone 是在页面完全加载之后被载入的，则 DOMContentLoaded 事件是不会执行的，此时也需要手动初始化。

发现错误？想参与编辑？在 GitHub 上编辑此页！