`
tyny
  • 浏览: 75785 次
  • 性别: Icon_minigender_1
  • 来自: 黄冈
社区版块
存档分类
最新评论

学习MCRV模式

 
阅读更多

引用 《前端开发中的MCRV模式

随着系统页面的脚本控制越来越多,大量的数据处理和界面控制代码散落在页面的角落,系统的修改越来越费劲,感觉js已经不不能仅仅作为网页特效的控制工 具,在了解的很多资料后,前端设计也慢慢变成一个和后台代码一样重要的东西了,他也需要良好的代码和系统结构,而不仅仅作为一个单纯的页面辅助的脚本了。 在后端(这里就是后台代码)mvc盛行的今天,他其实也可以用在js方面。在百度前端上看到篇文章《前端开发中的MCRV模式 》,这里下面的实例代码基本都是借鉴于原文的代码。

本文的代码主要是用jsfiddle 来写代码的,它实在太方便了。当然除了这样原生态(基本不依赖第三方,除了jquery)的写法还是很好理解的,但是这在大系统里面还是可以考虑类似Knockout.js等框架的适用,毕竟其强调模板和绑定可以节约大量时间。

<div id="demo"></div>
<div id="message"></div>
<div class="update">
    <div><label>ID</label><input id="txtId" type="text"></div>
    <div><label>Value</label><input id="txtValue" type="text"></div>
</div>
<div>
    <button id="btnSet">Set</button>
</div>​
 
table{ border:1px solid black; border-collapse:collapse;}
table td{ border:1px solid black; width:200px; height:30px; text-align:center}
.update{ position: relative ; margin-top : 10px; }
.update div{ margin: 5px; }
.update label{ display: block;text-align: right; left: 0; position: absolute; width:100px;}
.update input{ width: 100px; position: relative; margin-left: 120px;}​
 
$(document).ready(function() {
    function FlightModel() {
        this.init = function() {
            this.data = [
                { id: 1, airline: "HO1252"},
                { id: 2, airline: "MU5138"}
            ];
        }

        this.getFlightList = function() {
            return this.data;
        }

        this.getFlightById = function(id) {
            for (var i = 0; i < this.data.length; i++) {
                if (this.data[i].id == id) return this.data[i];
            }
            return null;
        }
    }

    function FlightRenderer() {
        this.init = function() {
            var me = this;
            $('.getprice').live('click', function() {
                var id = $(this).attr('cid');
                me.controller.beginUpdate(id);
            });
            $("#btnSet").bind("click", function() {
                me.controller.setAirline($("#txtId").val(), $("#txtValue").val());
            });
        }
        
        this.beginUpdate=function(flight){
            $("#txtId").val(flight.id);
            $("#txtValue").val(flight.airline);
        }
        this.updateFlight = function(flight) {
            if (flight) {
                var html = "";
                html += "<td>" + flight.airline + "</td>";
                html += "<td><button class='getprice' cid='" + flight.id + "'>getprice</button></td>";
                $("#tr" + flight.id).html(html);
            }
        }
        this.renderFlightList = function(flightList) {
            var html = [];
            $.each(flightList, function() {
                html.push("<tr id='tr" + this.id + "'>");
                html.push("<td>" + this.airline + "</td>");
                html.push("<td><button class='getprice' cid='" + this.id + "'>getprice</button></td>");
                html.push("</tr>");
            });
            $("#demo").append("<table>" + html.join("") + "</table>");
        }
    }

    function FlightController() {
        this.init = function() {
            this.initFlightList();
        }
        this.initFlightList = function() {
            var list = this.model.getFlightList();
            this.renderer.renderFlightList(list);
        }
        this.showMessage = function(id) {
            var flight = this.model.getFlightById(id);
        }
        this.beginUpdate=function(id){
            var flight=this.model.getFlightById(id);
            this.renderer.beginUpdate(flight);
        }
        
        this.setAirline = function(id, airline) {
            var flight = this.model.getFlightById(id);
            if (flight) {
                flight.airline = airline;
                this.renderer.updateFlight(flight);
            }
        }
    }

    function MCR(Controller, Model, Renderer) {
        this.controller = new Controller();
        this.model = new Model();
        this.renderer = new Renderer();
        this.controller.model = this.model;
        this.controller.renderer = this.renderer;
        this.model.controller = this.controller;
        this.renderer.controller = this.controller;
        if (typeof this.model.init == "function") {
            this.model.init();
        }
        if (typeof this.renderer.init == "function") {
            this.renderer.init();
        }
        if (typeof this.controller.init == "function") {
            this.controller.init();
        }
    }
    var mcr = new MCR(FlightController, FlightModel, FlightRenderer);
});​
分享到:
评论

相关推荐

    Web前端开发中的MCRV模式

    资源名称:Web前端开发中的MCRV模式内容简介:Web前端开发中的MCRV模式 针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性、扩展性和适应性差等问题,本文尝试以MVC思想为基础...

    mcrv模式[收集].pdf

    总的来说,MCRV模式是Web前端开发中的一种创新设计模式,它通过将内容、结构、表现和行为分离,结合MVC思想,为复杂页面的开发提供了清晰的组织结构,有助于提高代码的可读性、可维护性和可重用性,是现代Web开发中...

    JQuery中的MCRV框架

    因此,一些开发者提出了在jQuery基础上构建更高级的架构模式,如MCRV(Model-Controller-Render-View)框架。本文将深入探讨MCRV框架的核心概念和在jQuery中的应用。 **一、Model(模型)** 在MCRV框架中,Model是...

    本田CRV之DA快速使用指南(15MCRV)

    - **显示模式切换键**:用于切换不同的显示模式。 - **弹出/关闭键**:用于弹出CD或其他操作。 - **麦克风**:用于语音识别和蓝牙通话。 - **主页键**:返回主屏幕。 - **音量增大/减小**:调节音量。 - **菜单键**...

    PItuning_e.exe

    基于matab GUI编写的一个PI调节器V1.0版本,运行在MCRV9.0环境下。首先填写好传递函数的分子分母矩阵和仿真时间,点击Kp和Ki参数的滑条可以显示单位阶跃响应和bode图(蓝色为PI网络频率响应,红色为补偿前被控对象的...

    matlab齿轮代码-freesurfer-recon-all:执行FreeSurfer皮质重建过程的全部或任何部分

    MCRv84 构建的。 MCR 需要运行可选的海马子域和脑干结构处理(请参阅 参考资料)。 生成的图像约为 12GB,构建时间约为 15 分钟。 配置选项 用于运行算法(并添加许可证)的配置在manifest.json中定义。 文件中描述...

Global site tag (gtag.js) - Google Analytics