1 | # GMP JS Framework使用文档
|
2 |
|
3 | ### 1. 起步
|
4 | * hello world
|
5 |
|
6 | ```html
|
7 | <div id="container"></div>
|
8 |
|
9 | <script id="tmpl" type="text/html">
|
10 | <%=msg%>
|
11 | </script>
|
12 |
|
13 | ```
|
14 |
|
15 | ```javascript
|
16 |
|
17 | new GMP({
|
18 | el: '#container',
|
19 | data: {
|
20 | msg: 'hello world'
|
21 | },
|
22 | template:GMP.template('tmpl'),
|
23 | init: function(){
|
24 | this.render();
|
25 | },
|
26 | render: function() {
|
27 | $('#container').html(this.template(this.data));
|
28 | }
|
29 | });
|
30 |
|
31 | ```
|
32 |
|
33 | ```
|
34 | Hello GMP.js!
|
35 | ```
|
36 |
|
37 | * 渲染列表
|
38 |
|
39 | ```html
|
40 |
|
41 | <div id="container"></div>
|
42 |
|
43 | <script id="tmpl" type="text/html">
|
44 | <ul>
|
45 | <% for (var i = 0, len = list.length; i < len; i++) {%>
|
46 | <li><%=list[i]%></li>
|
47 | <%}%>
|
48 | </ul>
|
49 | </script>
|
50 |
|
51 | ```
|
52 |
|
53 | ```javascript
|
54 | new GMP({
|
55 | el: '#container',
|
56 | data: {
|
57 | list: ['快来玩国美+', '轻轻松松赚钱 , '快快乐乐分享']
|
58 | },
|
59 | template:GMP.template('tmpl'),
|
60 | init: function(){
|
61 | this.render();
|
62 | },
|
63 | render: function() {
|
64 | $('#container').html(this.template(this.data));
|
65 | }
|
66 | });
|
67 |
|
68 | ```
|
69 |
|
70 | ```
|
71 | 快来玩国美+
|
72 | 轻轻松松赚钱
|
73 | 快快乐乐分享
|
74 | ```
|
75 | 综合
|
76 | 请参考TodoList
|
77 | ### GMP实例
|
78 | 每个 GMP.js 应用的起步都是通过构造函数 GMP 创建一个 GMP 的根实例:
|
79 |
|
80 | ```javascript
|
81 | var vm = new GMP({
|
82 | // 选项
|
83 | })
|
84 |
|
85 | ```
|
86 |
|
87 | 在实例化 GMP 时,需要传入一个选项对象,它可以包含数据、模板、挂载元素、方法、生命周期钩子等选项。
|
88 | ### 属性
|
89 | ```
|
90 | el: app的id
|
91 | data: app数据
|
92 | events: 事件注册
|
93 | init: 初始化方法
|
94 | els: 页面元素对象
|
95 | template: 模板对象
|
96 | destroy: 销毁app
|
97 | $el: 组件的jquery/zepto对象
|
98 | appName: app名称
|
99 | ```
|
100 | ### 生命周期
|
101 | ![QQ20161108-1_2x](/uploads/f56dd44a7200e3e46a252ba033671666/QQ20161108-1_2x.png)
|
102 | ### 事件绑定
|
103 |
|
104 | ```html
|
105 | <div id="example">
|
106 | <button id="btn">Hello</button>
|
107 | </div>
|
108 |
|
109 | ```
|
110 | 我们绑定了一个单击事件处理器到一个方法 hello。下面在 GMP 实例中定义这个方法
|
111 | ```javascript
|
112 | var vm = new GMP({
|
113 | el: '#example',
|
114 | data: {
|
115 | name: 'GMP.js'
|
116 | },
|
117 | events:{
|
118 | 'click #btn': 'hello'
|
119 | },
|
120 | // 在 `methods` 对象中定义方法
|
121 | hello: function (event) {
|
122 | // 方法内 `this` 指向 vm
|
123 | alert('Hello ' + this.name + '!')
|
124 | // `event` 是原生 DOM 事件
|
125 | alert(event.target.tagName)
|
126 | }
|
127 | })
|
128 |
|
129 | // 也可以在 JavaScript 代码中调用方法
|
130 | vm.hello() // -> 'Hello GMP.js!'
|
131 | ```
|
132 | ### 内部事件
|
133 | 内部事件
|
134 | 注册on:
|
135 | `this.on("eventName", callback);`
|
136 | 解绑off
|
137 | `this.off("eventName");`
|
138 | 触发trigger
|
139 | `this.trigger("eventName", args);`
|
140 |
|
141 | 以下例子是对data数据变化的监听,在内部使用`this.on("change:attr", callback);`方式注册,属性值变更后自动触发callback方法。在这里是修改输入框中的值,然后点击提交后,对应的值也进行了更改。
|
142 |
|
143 | ```html
|
144 | <div id="container"></div>
|
145 |
|
146 | <script id="tmpl" type="text/html">
|
147 | <ul>
|
148 | <% for (var i = 0, len = list.length; i < len; i++) {%>
|
149 | <li><%=list[i]%></li>
|
150 | <%}%>
|
151 | </ul>
|
152 | <div id="form"></div>
|
153 | </script>
|
154 | <script id="ftmpl" type="text/html">
|
155 | <p><%=name%></p>
|
156 | <input type="text" id="name" value="<%=name%>">
|
157 | <button id="sBtn">修改</button>
|
158 | </script>
|
159 | ```
|
160 |
|
161 |
|
162 | ```javascript
|
163 | new GMP({
|
164 | el: '#container',
|
165 | data: {
|
166 | name: 'zeromike',
|
167 | list: ['鸣人', '佐助', '我爱罗', '春野樱']
|
168 | },
|
169 | events: {
|
170 | 'click #sBtn': 'submit'
|
171 | },
|
172 | submit: function() {
|
173 | this.data.name = $('#name').val();
|
174 | },
|
175 | template:{
|
176 | list: GMP.template('tmpl'),
|
177 | form: GMP.template('ftmpl')
|
178 | },
|
179 | init: function(){
|
180 | this.render();
|
181 | this.on("change:name", this.renderForm);
|
182 | },
|
183 | render: function() {
|
184 | $('#container').html(this.template.list(this.data));
|
185 | this.renderForm();
|
186 | },
|
187 | renderForm: function() {
|
188 | $('#form').html(this.template.form(this.data));
|
189 | }
|
190 | });
|
191 | ```
|
192 | ### 模板
|
193 | 模板解析使用最简单的方式,<%%>以上两种标记间写js代码即可
|
194 | ```
|
195 | <%js代码%>
|
196 | <%=属性%>
|
197 | ```
|
198 | ### 统一数据中心
|
199 | 目前这个很简单,相当于只是个全局对象,使用时,此对象放入单独的js文件,其他模块require进来这个对象
|
200 | ```javascript
|
201 | var g = new GMP.GMPX({
|
202 | //属性
|
203 | name: 'zeromike'
|
204 | })
|
205 | // 访问
|
206 | g.name
|
207 | // 设置
|
208 | g.name = zhangzhao
|
209 | ```
|
210 | ### 事件Bus
|
211 |
|
212 | ```javascript
|
213 | GMP.GMPEvents.on(eventsName,callback,context);// 注册
|
214 | GMP.GMPEvents.trigger(eventsName,args);//触发
|
215 | GMP.GMPEvents.off(eventsName,callback,context);//移除
|
216 | ```
|
217 |
|
218 | ```html
|
219 | <div id="container">
|
220 | <div id="ca"></div>
|
221 | <div id="cb"></div>
|
222 | </div>
|
223 |
|
224 | <script id="catmpl" type="text/html">
|
225 | <%=name%>
|
226 | </script>
|
227 | <script id="cbtmpl" type="text/html">
|
228 | <input type="text" id="name" >
|
229 | <button id="btn">修改</button>
|
230 | </script>
|
231 | ```
|
232 |
|
233 | ```javascript
|
234 | var ca = new GMP({
|
235 | el: '#ca',
|
236 | data: {
|
237 | name: 'zeromike'
|
238 | },
|
239 | template:GMP.template('catmpl'),
|
240 | init: function(){
|
241 | this.render();
|
242 | var that = this;
|
243 | GMP.GMPEvents.on('gmp_list', function(data) {
|
244 | that.data.name = data;
|
245 | that.render();
|
246 | })
|
247 | },
|
248 | render: function() {
|
249 | this.$el.html(this.template(this.data));
|
250 | }
|
251 | });
|
252 |
|
253 | var cb = new GMP({
|
254 | el: '#cb',
|
255 | template:GMP.template('cbtmpl'),
|
256 | events: {
|
257 | 'click #btn': 'submit'
|
258 | },
|
259 | submit: function() {
|
260 | GMP.GMPEvents.trigger('gmp_list', $('#name').val());
|
261 | },
|
262 | init: function(){
|
263 | this.render();
|
264 | },
|
265 | render: function() {
|
266 | this.$el.html(this.template());
|
267 | }
|
268 | });
|
269 |
|
270 | ```
|
271 |
|
272 |
|