视图的开发
概观
在skylark.js里视图(应用程序页面的视口)是由路由来代表的,路由通过路径识别和导航。 路径以“/”开始,支持参数,如
- /home
- /chapters/:id
每个路由由配置和正好一个路由控制器组成,路由事件被发送到相应的路由控制器进行处理。
路由控制器
您需要为每个路由(视图)创建一个控制器类,并且在控制器类中,您应该为要处理的每个路由事件创建一个名称相同的方法。
以下路由控制器根据路径参数生成不同的视图呈现。
ChapterController.js
define([ "skylarkjs", "text!./templates/chapter1.html", "text!./templates/chapter2.html", "text!./templates/chapter3.html" ],function(spa,tpl1,tpl2,tpl3){ var spa = skylarkjs.spa, $ = skylark.query; return spa.RouteController.inherit({ klassName: "ChapterController", rendering(e) { var html; switch(e.context.params.id) { case "1" : html = tpl1; break; case "2" : html = tpl2; break; case "3" : html = tpl3; break; default : html = ""; break; } e.content = html; }, exiting(e) { var field = $('[name="field"]').val(); if (field) { var ret = confirm('Are you sure you want to quit this chapter ?'); if (!ret) { e.result = false; } } } }); });
路由配置
所有路由需要在slax-config.json中配置,上述示例中的路由配置如下:
slax-config.json
{ ... "routes" : { "chapter": { "pathto" : "/chapter/:id", "controller" : { "type" : "scripts/routes/chapter/ChapterController" } } } ... }
路线事件
路线事件如下:
preparing
当runtime引用route模块时触发(即代码只执行一次),用于异步处理,比如获取后台数据。 事件对象具有以下属性:
- route
Route实例 - result
异步执行结果,一般为promise
entering
当将要进入某个路由时触发(进入一次执行一次)
事件对象具有以下属性:
- route
Route实例 - context
将进入路由的路径和参数值信息 ,such as{ path : "/chapters/2", params : { id : "2" } }
entered
当已进入某个路由时触发(进入一次执行一次)
事件对象具有以下属性:
- route
同其他所有路由事件 - context
同其他所有路由事件
rendering
当路由需要渲染视图时触发 (进入一次执行一次)
事件对象具有以下属性:
- route
同其他所有路由事件 - context
同其他所有路由事件 - content
The return value of the event handler, view content is set, can be an HTML string or a DOM node
rendered
当路由需要渲染视图后触发(进入一次执行一次)
事件对象具有以下属性:
- route
同其他所有路由事件 - content
The return value of the event handler, view content is set, can be an HTML string or a DOM node
exiting
当将要离开某个路由时触发
事件对象具有以下属性:
- route
同其他所有路由事件 - context
同其他所有路由事件 - result
The return value of the event handler,If false is set, path changing is not allowed
exited
当已离开某个路由时触发(进入一次执行一次)
事件对象具有以下属性:
- route
同其他所有路由事件 - context
同其他所有路由事件
CLI 命令
sjs 命令
skylark.js sdk提供了以下命令
add routes
使用以下命令添加一个或多个路由。
<route>是要添加的路由的名称和路径的定义,单个路由格式为<name>:<path>,多条路由与“,”分开
sjs routes add <slaxPrjRoot> <routes>
example:
sjs routes add . home:/,chapter:/chapters/:id
delete routes
使用以下命令删除一个或多个路由。
* sjs routes delete <slaxPrjRoot> <routes>
<routes>是要删除的路由的名字列表,多条路由与“,”分开
list routes
使用以下命令列出现有路由。
* sjs routes list <slaxPrjRoot>
npm run 命令
当使用sjs create命令创建slax项目时,上述sjs命令被包装到包脚本中,您可以使用npm run来执行这些脚本,不需要指定项目路径。
- npm run route-add – <routes>
- npm run route-delete – <routes>
- npm run route-list