UNPKG

4.97 kBMarkdownView Raw
1# FKP-SAX
2
3```
4// install
5npm install fkp-sax --save
6```
7
8## API
9
10SAX的意思是"store and action X", 在`FKP-JS``FKP-RN`项目中均是核心方法,Router、Pager以及like flux mixins for react etc...都依赖于SAX
11SAX is a function like nodejs EventEmitter, maybe better
12SAX is a global variable in `FKP-JS` and `FKP-RN`
13I suggest u set SAX as global variable
14
15| API | 描述 | 例子 |
16| :-------------: |-------------| -----|
17| set | 设置命名空间及参数 | SAX.set( ID, data, actions )|
18| get | 获取命名空间的数据 | SAX.get( ID )|
19| has | 是否有该命名空间 | SAX.get( ID, [callback])|
20| append | 给指定ID的命名空间追加数据 | SAX.append( ID, data ) |
21| setter/trigger | 设置命名空间并执行该空间中的方法 | SAX.trigger( ID, data, actions )|
22| getter | 获取指定ID的命名空间的所有属性 | SAX.getter( ID ) |
23| deleter | 删除指定ID的命名空间 | SAX.deleter( ID )|
24| runner/roll | 执行指定ID的命名空间 | SAX.roll( ID, [JSON] )|
25| lister | 列表出所有的命名空间 | SAX.lister()|
26| bind | 显示绑定命名空间方法的上线文(bind context) | SAX.bind(id, ctx)|
27| setActions | 设置命名空间的action | SAX.setActions(id, [fun collections])|
28
29## Instance/实例化
30```
31import SAX from 'fkp-sax'
32const saxer = SAX('uniqueName') //SAX.set('uniqueName', {}, function)
33```
34saxer有如下API
35saxer have some API function
36
37| API | 描述 | 例子 |
38| :-------------: |-------------| -----|
39| get | get data from uniqueName | saxer.get()|
40| has | 是否有其他命名空间 | saxer.has( otherUniqueName, [callback])|
41| append | 追加数据 | saxer.append( data ) |
42| trigger | performance uniqueName's function with append data | saxer.trigger( data )|
43| roll | performance uniqueName's function with new data | saxer.roll( data )|
44| bind | 显示绑定命名空间方法的上下文(bind context) | saxer.bind(context)|
45| pop | uniqueName's data is array, then pop the last item | saxer.pop()|
46
47
48## 作为内存数据库
49as a simple data library in memery
50SAX可以作为简易的内存数据库,来存储页面中的变量
51
52> Normal operation
53set and get and deleter
54
55```
56// Json
57SAX.set('Xyz', {a: 1, b: 2})
58SAX.append('Xyz', {c: 3})
59SAX.append('Xyz', "ni hao")
60SAX.append('Xyz', [1,2,3])
61SAX.get('Xyz')
62// {a:1, b:2, c:3, [uniqueId]:'ni hao', [uniqueId]:[1,2,3] }
63
64// Array
65SAX.set('Xyz', [1,2,3])
66SAX.append('Xyz', 4)
67SAX.append('Xyz', 'abc')
68SAX.append('Xyz', {x:22})
69SAX.get('Xyz')
70// [1, 2, 3, 4, 'abc', {x:22}]
71
72// other
73SAX.set('Xyz', 'hello')
74SAX.append('Xyz', 4)
75SAX.append('Xyz', {x:22})
76SAX.append('Xyz', [1,2,3])
77SAX.get('Xyz')
78// ['nihao', 4, {x:22}, [1,2,3]]
79
80SAX.deleter('Xyz')
81SAX.lister()
82// no Xyz namespace
83```
84
85> Instance operation
86simplify working processes
87
88```
89const test = SAX('uniqueName', {}, (data)=>{console.log(data)})
90test.append({a: 123, b: 234})
91test.roll() // object {a: 123, ...}
92test.trigger({a: 111, b: 222}) // object {a: 111, b: 222}
93...
94```
95
96## 作为触发器
97as a trigger to performance some predefine method, with ajax or delay data, it's Very useful
98SAX可以作为触发器,触发预定义的方法,配合ajax或者延时数据使用
99
100### 简单方法/simple
101```
102# Object
103SAX.set('Xyz', {x:3, y:4}, abc)
104function abc(data){
105 console.log(data)
106}
107
108SAX.roll('Xyz') // print {x:3, y:4}
109
110setTimeout(function(){
111 let _data = {a: 1, b: 2}
112 SAX.trigger('Xyz', _data) // only use `trigger`
113}, 3000)
114// after 3 seconds then print {x:3, y:4, a: 1, b: 2}
115
116# Array
117SAX.set('Xyz', [1, 2], abc)
118function abc(data){
119 console.log(data)
120}
121
122SAX.roll('Xyz') // print [1,2]
123
124setTimeout(function(){
125 let _data = [3, 4]
126 SAX.trigger('Xyz', _data) // only use `trigger`
127}, 3000)
128// after 3 seconds then print [1,2,3,4]
129```
130
131### 高级方法/adv
132bind context
133SAX可以绑定上下文,及传送一个data的参数
134FKP's Router 和 Pager 使用了这种方式
135[demo](http://www.agzgz.com/app)
136
137```
138// 1
139let context = {a: 1,b: 2}
140SAX.set('Xyz', abc, [context])
141function abc(ctx, data){
142 console.log(this)
143 console.log(ctx)
144 console.log(data)
145}
146
147SAX.trigger('Xyz', {x:3,y:4})
148// this is : {a:1,b:2}
149// ctx is : {a:1,b:2}
150// data is : {x:3,y:4}
151
152// 2
153NOTE: function abc's arguments[0]
154
155let context = {a: 1,b: 2}
156SAX.bind('Xyz', context)
157SAX.set('Xyz', {a: 3, b: 4}, abc)
158function abc(data){
159 console.log(this)
160 console.log(data)
161}
162
163SAX.trigger('Xyz', {x:3,y:4})
164// this is : {a:1,b:2}
165// data is : {x:3,y:4}
166```
167
168### 自执行/run again
169if ID has action, you can run it again, use `roll`
170roll能够执行已经存在的ID,如果该id有action 方法
171
172```
173// init
174let context = {a: 1,b: 2}
175SAX.set('Xyz', context, abc)
176function abc(data){
177 console.log(data)
178}
179SAX.roll('Xyz')
180// data is : {a: 1,b: 2}
181```