前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Cocos2d-js中的简易MVC框架(二)数据模型Model

Cocos2d-js中的简易MVC框架(二)数据模型Model

作者头像
用户1428723
发布2020-08-06 15:20:53
8200
发布2020-08-06 15:20:53
举报
文章被收录于专栏:代码与画家

模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。数据模型Model在MVC结构中扮演者非常重要的较色。

在我写的这套MVC结构中Model作为本地数据逻辑存储对象来使用,主要负责监听服务器数据返回、通知控制器修改视图、处理数据逻辑和保存数据对象。

IModel作为model的基类,主要实现接口如下:

代码语言:javascript
复制
game.IModel = cc.Class.extend({  
    ctor:function () {  },  
    init:function ()  {       
        throw new Error("SubClass not init subscribe function.");  
    },  
    //Use this function to send notification.  
    send:function (key, obj)  {    
        game.Notification.send(key, obj);  
    }
});

ctor作为构造函数不必多说。Init函数子类必须去实现,在初始化Model对象时init函数会自动被调用,子类对象可以在init函数中做一些初始化操作等,在网络游戏项目中对服务器数据返回的监听也是放在init函数中进行注册。Send是进行消息分发的函数,有两个参数key、obj,key是消息的唯一id,obj是消息要传递的对象。在mvc的结构中model通过发送通知告诉mediator控制器数据变化,mediator再根据自己的逻辑进行处理然后控制View进行更新。一般Model可以被mediator持有。

在Facade中提供了一个注册model的共有接口在游戏初始化中提供调用:

代码语言:javascript
复制
game.Facade.registerModel = function (cls, model) {  
    model.init();  
    var isExist = game.Facade._modelMap.contains(cls); 
    if (isExist) {
    cc.log("Model:" + cls + " have already exists!");
    } else {
        game.Facade._modelMap.put(cls, model);
    }
}

cls为类名,model为实例对象,注册后在mediator中会提供接口方便获取注册的model实例,具体获取方法在介绍mediator时会讲到。注册model的方法如下:

代码语言:javascript
复制
//注册model
GameControler.registModel = function () {
game.Facade.registerModel(model.UserModel, new model.UserModel()); 
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 代码与画家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档