UNPKG

2.91 kBMarkdownView Raw
1插件:编写插件
2==============================
3
43 步即可编写一个 vConsole 插件:
5
6- 实例化 vConsole 插件
7- 绑定事件到插件
8- 将插件添加到 vConsole
9
10
11## 1. 实例化插件
12
13插件原型挂载在 `VConsole.VConsolePlugin` 中:
14
15```javascript
16VConsole.VConsolePlugin(id, name)
17```
18
19- `id` (必填) 字符串,插件的 id,必须保证唯一,不能与其他插件冲突。
20- `name` (选填) 字符串,展示为 tab 面板的名字。
21
22所以这一步只需将插件 `new` 出来即可:
23
24```javascript
25var myPlugin = new VConsole.VConsolePlugin('my_plugin', 'My Plugin');
26```
27
28
29
30## 2. 绑定插件事件
31
32在初始化插件、后续运行时,vConsole 会对插件触发一些事件(event)。插件须通过这些事件来完成自定义功能。
33
34使用 `.on()` 方法来绑定一个事件:
35
36```javascript
37on(eventName, callback)
38```
39
40- `eventName` (必填) 字符串,事件的名字。
41- `callback` (必填) 回调函数,事件被触发时执行。
42
43
44
45例子:
46
47```javascript
48myPlugin.on('init', function() {
49 console.log('My plugin init');
50});
51```
52
53关于每个事件的具体功效,请查阅[Event 事件列表](./plugin_event_list_CN.md)。
54
55
56
57在本教程中,我们准备编写一个既有 tab 面板,又有 tool 按钮(位于面板底部)的插件。
58
59添加新 tab 面板,需要绑定 `renderTab` 事件:
60
61```javascript
62myPlugin.on('renderTab', function(callback) {
63 var html = '<div>Click the tool button below!</div>';
64 callback(html);
65});
66```
67
68插件初始化过程中,就会触发 `renderTab` 事件。在这里我们简单地回传了一个 HTML 字符串给 `callback`,然后这段 HTML 就会被选染成新 tab 面板的主体部分。这个新 tab 的名字就是刚才实例化时的 `name`
69
70此外,若不绑定 `renderTab`,那么 vConsole 就不会添加新 tab。
71
72
73
74接下来要添加一个底部的 tool 按钮,需要绑定 `addTool` 事件:
75
76```javascript
77myPlugin.on('addTool', function(callback) {
78 var button = {
79 name: 'Reload',
80 onClick: function(event) {
81 location.reload();
82 }
83 };
84 callback([button]);
85});
86```
87
88同样地,`addTool` 会在插件初始化过程中触发,且在 `renderTab` 之后。回调函数 `callback` 的参数接收一个 `array` 数组,数组元素是用于配置按钮的 `object` 对象。本例中,点击这个按钮会重新加载当前网页。
89
90
91
92## 3. 添加到 vConsole
93
94最后一步,就是将写好的插件添加到 vConsole 中:
95
96```javascript
97vConsole.addPlugin(pluginObject)
98```
99
100`pluginObject` (必填) 必须为 `VConsolePlugin` 实例化的对象。
101
102例子:
103
104```javascript
105vConsole.addPlugin(myPlugin);
106```
107
108在添加到 vConsole 之前,请确保已经绑定完所有需要用到的事件。一些初始化相关的事件只会在插件被添加时触发一次,并不会在其他时机被触发。
109
110
111[返回索引](./a_doc_index_CN.md)
\No newline at end of file