UNPKG

6.09 kBMarkdownView Raw
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
17new 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```
34Hello 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```
90el: app的id
91data: app数据
92events: 事件注册
93init: 初始化方法
94els: 页面元素对象
95template: 模板对象
96destroy: 销毁app
97$el: 组件的jquery/zepto对象
98appName: 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
112var 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 代码中调用方法
130vm.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
163new 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
201var g = new GMP.GMPX({
202 //属性
203 name: 'zeromike'
204})
205// 访问
206g.name
207// 设置
208g.name = zhangzhao
209```
210### 事件Bus
211
212```javascript
213GMP.GMPEvents.on(eventsName,callback,context);// 注册
214GMP.GMPEvents.trigger(eventsName,args);//触发
215GMP.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
234var 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