插件提供了一种实现不属于单个路由视图的公共逻辑的机制,例如导航菜单处理。
每个插件也都由插件配置和一个插件控制器组成。 框架将插件事件发送到相应的插件控制器进行处理。
您需要为每个插件创建一个控制器类,在控制器类中,您应该为要处理的每个插件事件创建一个名称相同的方法。
以下插件实现了当视图变化时自动突出显示当前视图对应的菜单的功能。
HighlightController
define([ "skylarkjs", ],function(skylarkjs){ var spa = skylarkjs.spa, $ = skylark.query; return spa.PluginController.inherit({ klassName: "HighlightController", routing (e) { }, routed (e) { var links = $("a.active"); links.removeClass("active"); links = $("a[href*=\"'" + e.current.path + "'\"]"); links.addClass("active"); links[0].focus(); } }) });
所有插件需要在slax-config.json中配置,上述示例中的插件配置如下:
slax-config.json
{ ... "plugins" : { "highlight": { "hookers": "routing routed", "controller": { "type": "scripts/plugins/highlight/HighlightController" } } } ... }
插件事件如下 :
当runtime引用plugin模块时触发,用于异步处理,比如获取后台数据。 事件对象具有以下属性:
当应用程序启动时触发。
事件对象具有以下属性:
应用程序启动后触发。
事件对象具有以下属性:
应用程序当前视图发生改变时触发。
事件对象具有以下属性:
context data example:
{ path : "/chapters/2", params : { id : "2" } }
应用程序当前视图发生改变后触发。
事件对象具有以下属性:
skylark.js sdk提供了以下命令
使用以下命令添加一个或多个插件。
<plugins> 是添加插件的名称和挂钩事件的定义,单个插件格式为<name>:<events>,多条插件与“,”分开
sjs routes add <slaxPrjRoot> <routes>
example:
sjs plugins add . highlight:routing+routed
使用以下命令删除一个或多个插件。
* sjs plugins delete <slaxPrjRoot> <plugins>
<plugins>是要删除的插件的名字列表,多个插件与“,”分开
使用以下命令列出现有的插件。
* sjs plugins list <slaxPrjRoot>
当使用sjs create命令创建slax项目时,上述sjs命令被包装到包脚本中,您可以使用npm run来执行这些脚本,不需要指定项目路径。