应用启动

start是light框架的第一步逻辑,light所有视图的加载与实例化都在start之后。

start接口的运行时机

在H5运行状态下,light框架会判断当前是否是在light的web容器下环境运行,如果判断为在light的web容器内运行,会等待容器的deviceready事件后再开始节点挂载,以避免原生容器未准备好的情况下就去渲染资源。

如果您本身的程序未使用任何原生接口,或者自己处理了接口的调用时机,可以不再等待原生的deviceready事件,此时可以使用_startNow来替换start接口来启动。

start接口有三种调用形式,分别为Light.start(options, callback)Light.start(callback),以及Light.start()

  • {object} options
    • {string} viewport 屏幕宽度
    • {string} routeMode 路由模式,默认为hash
    • {string} remMode rem的计算模式,默认为document
    • {string} el 视图根节点,默认为’#main’
  • {function} callback

options.viewport

用于定义默认viewport的宽度,默认为750,非特殊情况请勿修改此默认值。

viewport修改会导致页面渲染异常

viewport仅在必要时使用,请勿随意修改此默认值。此参数仅在JSNative项目时有效!

options.routeMode

用于定义路由与历史模型记录的方式,默认为hash,此时 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。

如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。

Light.start({
routeMode:"history"
})

当你使用 history 模式时,URL 就像正常的 url,例如 http://yoursite.com/user/id.

不过这种模式还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 http://oursite.com/user/id 就会返回 404。

options.remMode

rem的计算模式。默认值为document,设置为screen时可以兼容移动端h5页面,此时deviceWidth的值等同于window.screen.width,从而计算出正确的rem值。

Light.start({
remMode:"screen"
})

options.el

用于定于默认挂载页面到的dom节点的选择器,默认值为#main,该dom节点必须存在于index.html中。

callback

当页面挂载成功后,light核心引擎会调用此callback方法。

开发者可以在callback中处理全局通用依赖的逻辑。

启动是整个应用的第一行代码,只有在Light.start调用以后才会真正计入框架所控制的业务逻辑。基于这个定义,您可以将Light.start()的代码放置于任何地方,尤其是当应用的展现(启动)依赖于一部分资源或者异步操作的时候。

Light.start在调用之后一次调用所注册视图的ready方法,然后初始化系统路由并开始监听路由变化。在start执行完毕后,就会主动触发appStarted事件,需要在应用启动后处理的逻辑可以监听此事件。

Light.start(options,fn),在执行的时候允许传入一个配置项和一个回调函数,在应用启动完成后会调用此函数,其实现和使用场景与appStarted类似。

Light.start({
viewport: '750',
el: '#main',
routeMode: 'hash'
}, function(){
logger.debug("app started");
});