引用 《前端开发中的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模式 针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性、扩展性和适应性差等问题,本文尝试以MVC思想为基础...
总的来说,MCRV模式是Web前端开发中的一种创新设计模式,它通过将内容、结构、表现和行为分离,结合MVC思想,为复杂页面的开发提供了清晰的组织结构,有助于提高代码的可读性、可维护性和可重用性,是现代Web开发中...
因此,一些开发者提出了在jQuery基础上构建更高级的架构模式,如MCRV(Model-Controller-Render-View)框架。本文将深入探讨MCRV框架的核心概念和在jQuery中的应用。 **一、Model(模型)** 在MCRV框架中,Model是...
- **显示模式切换键**:用于切换不同的显示模式。 - **弹出/关闭键**:用于弹出CD或其他操作。 - **麦克风**:用于语音识别和蓝牙通话。 - **主页键**:返回主屏幕。 - **音量增大/减小**:调节音量。 - **菜单键**...
基于matab GUI编写的一个PI调节器V1.0版本,运行在MCRV9.0环境下。首先填写好传递函数的分子分母矩阵和仿真时间,点击Kp和Ki参数的滑条可以显示单位阶跃响应和bode图(蓝色为PI网络频率响应,红色为补偿前被控对象的...
MCRv84 构建的。 MCR 需要运行可选的海马子域和脑干结构处理(请参阅 参考资料)。 生成的图像约为 12GB,构建时间约为 15 分钟。 配置选项 用于运行算法(并添加许可证)的配置在manifest.json中定义。 文件中描述...