HTML5开发中使用MVC模式

来源:互联网 发布:哪个软件有翡翠台 编辑:程序博客网 时间:2024/04/28 00:15

很多人一定会说,js开发根本不需要什么MVC,用了就是给自己找麻烦。在这里,我不去讨论需不需要的问题,只是我个人感觉这次的开发使用了MVC模式之后,代码各个模块确实一目了然,维护和扩展都相对方便了许多,很适合大中型的开发,当然对于小程序而言,也确实没有使用MVC的必要。现在我将这个框架公开,并在这里简单说明一下它的用法,这个框架是我在很短的时间内完成的,所以一定存在很多不完善的地方,如果你有更好的想法,也欢迎提出来一起讨论。

一,命名

沿用我在lufylegend.js引擎中的命名方式,我给这个框架命名为LMvc,框架已被加入到lufylegend.js的下载包。

二,使用前提

本框架是我在lufylegend.js引擎的基础上完成的,所以使用它的话,你需要引入lufylegend.js引擎。

三,特点

动态加载文件,你可能会把所有JS文件写到了一起,但是工程很大的时候,你的JS文件也会很大,会影响页面的显示速度,LMvc不但可以动态加载图片,还可以动态加载JS,一个页面,你每次只需要加载与它相关的文件即可。

四,使用方法

首先配置引擎中各路径LMvc.JS_PATHLMvc.IMG_PATHLMvc.MVC_PATHLMvc.API_PATHLMvc.SOUND_PATH
如果需要提前读取一些图片的话,需要将读取完的数据赋值给LMvc.datalist,在后面使用LMvc框架读取图片的时候,会自动对LMvc.datalist进行监测,重复的图片会不再次读取。
最后,调用LMvc.init();就可以进入IndexController了。

每一个***Controller,***Model,***View是一个组,使用之前必须先读取,使用控制器的loadMvc函数,可以读取一组MVC
一组MVC中可以互调,在控制器Controller中,可以使用控制器.model来调用它的模型,使用控制器.view来调用它的视图。在模型Model,可以使用模型.controller来调用它的控制器,使用模型.view来调用它的视图。在视图View,可以使用模型.controller来调用它的控制器,使用模型.model来调用它的模型。

1,控制器Controller

简而言之,一个控制器就是一个类文件。控制器必须放到Controllers文件夹内,控制器的名字以Controller结尾。
在控制器中,可以使用 this.model来调用它的模型,使用 this.view来调用它的视图。

控制器中的函数

construct()

控制器初始化结束后会直接调用此函数,如果有想要在控制器初期化结束后运行的代码,可以写在construct函数内,控制器的construct函数,在模型的construct函数运行之后运行。

loadMvc(name,callback,lastClass)

读取一组MVC,name是控制器的名称中去除Controller的部分;callback是回调函数,当MVC的三个文件读取完之后,会自动调用此函数;lastClass需要设定为当前对象this。

loadMvc使用举例:

[javascript] view plaincopy

  1. function IndexController(){  
  2.     base(this,MyController,[]);  
  3. }  
  4. IndexController.prototype.construct=function(){  
  5.     var self = this;  
  6.     self.loadMvc("Logo",self.logoLoad);  
  7. };  
  8. IndexController.prototype.logoLoad=function(){  
  9.     var self = this;  
  10.     var logo = new LogoController();  
  11.     self.view.addChild(logo.view);  
  12. };  




load : 控制器中的load对象用来读取各种文件,使用方法如下

this.load.model(names,callback)

读取一个或者多个模型。

this.load.view(names,callback)

读取一个或者多个视图。

this.load.library(names,callback)

读取一个或者多个外部类库。

this.load.helper(names,callback)

读取一个或者多个辅助函数文件。

this.load.image(loadData,callback)

读取多张图片。

load.modelload.view一般是不用的,但是在一个控制器中要想使用另一组的模型和视图的时候,就需要个别读取了。

load.library的使用案例

[javascript] view plaincopy

  1. function GameController(){  
  2.     base(this,MyController,[]);  
  3. }  
  4. GameController.prototype.construct=function(){  
  5.     var self = this;  
  6.     self.load.library(["Character","AttackCharacter","Face","Bar","effects/Effect02","effects/Qinglong","effects/Baihu","BitmapSprite","CoolingTime"],self.libraryLoadOver);  
  7. };  
  8. GameController.prototype.libraryLoadOver=function(){  
  9.     var self = this;  
  10.     var chara = new Character();  
  11.     self.view.addChild(chara);  


load.helper
的使用案例

[javascript] view plaincopy

  1. function GameController(){  
  2.     base(this,MyController,[]);  
  3. }  
  4. GameController.prototype.construct=function(){  
  5.     var self = this;  
  6.     self.load.helper(["Talk","UI"],self.helperloadOver);  
  7. };  
  8. GameController.prototype.helperloadOver=function(){  
  9.     var self = this;  
  10.     Talk("对话测试");  
  11. };  


load.image
的使用案例

[javascript] view plaincopy

  1. function GameController(){  
  2.     base(this,MyController,[]);  
  3. }  
  4. GameController.prototype.construct=function(){  
  5.     var self = this;  
  6.     var list = self.model.getCommonImages();  
  7.     self.load.image(list,self.loadImageOver);  
  8. };  
  9. GameController.prototype.loadImageOver=function(){  
  10.     var self = this;  
  11.     //读取完图片后,可以通过LMvc.datalist获取  
  12. };  



2,模型Model

模型是专门用来和数据打交道的,数据的存储等工作需要写到模型内。模型必须放到Models文件夹内,模型的名字以Model结尾。
在模型中,可以使用 this.controller来调用它的控制器,使用 this.view来调用它的视图。

3,视图View

视图是一个LSprite的子对象。视图必须放到Views文件夹内,视图的名字以View结尾。
在模型中,可以使用 this.controller来调用它的控制器,使用 this.model来调用它的模型。

4,辅助函数

在控制器中可以通过this.load.helper来读取一个辅助函数文件。辅助函数文件必须放到Helpers文件夹内。

5,类库

在控制器中可以通过this.load.library来读取一个类库。类库必须放到Libraris文件夹内,类库的名字与控制器,模型和视图的名字不同,它的名字就是类库的名字。

 

0 0
原创粉丝点击