界面与数据分离怎么做?

 1、界面与数据的分离,必须体现在代码上,界面的代码归界面的代码,数据的代码归数据的代码,两者必须泾渭分明。

2、当界面需求发生改变,只需要改写界面的代码,并且所改写的代码不能影响到数据访问的代码。

只有做到这两者才算界面与数据分离。叶小钗同学让我上代码,趁今天还不是很忙,写下了下面的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script>
        $(function () {
            var Countries = function () { }

            Countries.prototype = {
                _items: [],
                _getData: function (success) {
                    var items = [
                       { id: 0, name: '中国' },
                       { id: 1, name: '日本' },
                       { id: 2, name: '美国' }
                    ];
                    $.extend(this._items, items);
                    success(items);
                },
                //Events
                on_selected: $.Callbacks(),
                on_inserted: $.Callbacks(),
                //Methods
                select: function () {
                    var self = this;
                    this._getData(function (items) {
                        self.on_selected.fire({
                            sender: self,
                            items: items
                        });
                    });
                },
                insert: function (item) {
                    var self = this;
                    this._items.push(item);
                    self.on_inserted.fire({ sender: self, item: item });
                }
            }

            //=======================================================================
            // 以下为界面代码,当要调整界面,改这里就行啦~~~
            var countries = new Countries();
            countries.on_selected.add(function (args) {
                $(args.items).each(function () {
                    $('#countries').append($('<option>').attr('value', this.id).text(this.name));
                });
            });

            countries.on_inserted.add(function (args) {
                $('#countries').append($('<option selected="selected">').attr('value', args.item.id).text(args.item.name));
            });

            var id = 10;
            $('#btnAdd').click(function () {
                countries.insert({ id: ++id, name: $('#countryName').val() });
            });

            countries.select();
            //=======================================================================
        });

    </script>
</head>
<body>
    <select id="countries"></select>
    <div>
        <input id="countryName" /><button id="btnAdd">添加</button>
    </div>
</body>
</html>

代码是可以直接Copy运行的,界面如下图:

上面的代码,真正做到了界面与数据的分离:

1、在数据访问的代码,没有一行涉及到UI的,如果有一行,哪怕一行涉及到,都不能算是界面与数据分离。(简单点说,就是数据访问的代码,不能对UI有依赖)

2、当界面需求发生变化,只要修改界面的代码就可以了。

3、数据访问的代码会不会发生变化?一般来说,这个是很少会发生变化的(相比界面)。假如发生变化了,需要修改数据访问的代码,所作的修改并不会影响到界面的代码。

关于代码,我就不作解释了,相信有点基础的同学都能看懂

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据
, 界面
, 代码
, function
, items
, 代码数据
, 代码与
分离
,以便于您获取更多的相关知识。

时间: 2024-08-31 23:51:09

界面与数据分离怎么做?的相关文章

界面与数据分离的示例

前几天,看到叶小钗同学的<一次面试回顾--探讨表现与数据分离> ,并且发表自己的见解.他说的"表现",在我的文章表述为界面,我认为: 1.界面与数据的分离,必须体现在代码上,界面的代码归界面的代码,数据的代码归数据的代码,两者必须泾渭分明. 2.当界面需求发生改变,只需要改写界面的代码,并且所改写的代码不能影响到数据访问的代码. 只有做到这两者才算界面与数据分离.叶小钗同学让我上代码,趁今天还不是很忙,写下了下面的代码: <!DOCTYPE html> <

云上如何做冷热数据分离

前言 随着业务的发展和持续运行,系统会产生大量的数据,数据的增长伴随而来的是对数据库的考验,在达到一定的数据量之后数据库的访问性能就会持续下降,为了系统的稳定运行,得要么提高数据库访问性能,要么把数据限定在一定的量上.前者会导致IT系统的不断投入,投入产出比不高,且早晚会达到系统的瓶颈,后者需要抛弃旧的数据,从历史数据的完整性上来说也是我们不愿意看到的. 如果暂时没有上分析性数据仓库的需求,那么做冷热数据的分离就是一个比较好的解决办法.将热数据剥离开来,保证热数据的读写性能,冷数据相对来说访问量

探讨JS表现与数据分离

首先,当时我简历是抄的,里面有一句"对表现与数据分离有一定理解",然后面试官就针对这点开问了 PS:尼玛,那是抄的,我哪里知道他是干神马的...... 为了帮助我展开思维,面试官出了一道题: 他有一个国家列表,现在要将国家列表放到A中,然后B可以由A选择,也可以有总列表选择 但是B中添加后,若是A中没有要动态为A增加这项. 问题出来了,我现在一看就知道面试官想问什么了......当时其实没有理解到啦...... 现在来看,说这道题与表现与数据分离有关是没有问题的,却不一定让人很好的产生

一次面试回顾:探讨表现与数据分离

前言 半年多之前有一次面试,当时只是想要张回家的免费机票,顺便看看运气 却不想那次面试获益颇丰,所以没事出去面试面试对个人的知识总结以及思维的深化很有帮助的哦 深化当然不是一朝一夕的事情,比如当时面试官就问我什么是"表现与数据分离",就这个问题我就前前后后学习了很久,也和很多同事讨论过,但是一直没有一个比较好的结果 最近在做ipad相关的单页应用研究,被一个问题困住了思维,晚上看了两集布袋戏,完了在纸上画着画着,突然对半年多之前的一道面试题很有点思路 于是,今天晚上,抽时间记录之,此文

tkinter的GUI设计:界面与逻辑分离(四)-- 与 matplotlib 结合

有些场合,我们需要对数据可视化.单是靠 tkinter 难度太大,而且做出来的效果不一定理想. 此时,将 tkinter 与 matplotlib 结合,是最好的选择. 知识点: 将 tkinter 与 matplotlib 结合的整个套路是固定的,只需要关心我们的绘图逻辑和程序逻辑即可     import matplotlib matplotlib.use('TkAgg') import numpy as np from matplotlib.backends.backend_tkagg i

表现与数据分离:前台MVC

无意间看到一个web前端招聘要求:表现与数据分离 这名词对我很陌生,我就去百度了下 因为有各种莫名其妙的需求,所以才会出现我们前端MVC这种莫名其妙的东西... 我们的html就是model,我们的css就是view,我们的js就是controller. 话不多说,先上一段代码(原来的代码,抄过来的): 2 <head> 3     <title></title> 4     <script src="../jquery-1.7.1.js" t

数据类型-delphi 从服务器上收到的数据能直接做加减吗

问题描述 delphi 从服务器上收到的数据能直接做加减吗 通过CTP的收到期货的市场数据,LASTPRICE是最新价格,是实时更新的.我可以打印LPRICE1和LPRICE2,但是他们的差值就不行,别的地方直接用LPRICE1和LPRICE2也不行,求高手指点啊!!越详细越好!! Var lprice1,lprice2,chajia:double;全局变量 procedure TForm1.CTPMarketData(ASender: TObject; const InstrumentID:

link环境下制作一款《订餐软件》,我想知道数据分离如何和系统正常运转同时?

问题描述 link环境下制作一款<订餐软件>,我想知道数据分离如何和系统正常运转同时? link环境下制作一款<订餐软件>,我想知道数据分离如何和系统正常运转同时? 解决方案 不知道你说的分离是什么意思,如果是备份的话,这个没有关系,sql server天生通过日志和快照就是支持的. 解决方案二: 如果后台采用的是oracle数据库,可以用分区表来实现,这个东东分离数据时系统可以正常运转 http://blog.itpub.net/219982/viewspace-701109/

javaweb-IOS 获取图片路径然后生成NSData数据,Java做的后台怎么接收数据并保存

问题描述 IOS 获取图片路径然后生成NSData数据,Java做的后台怎么接收数据并保存 RT,现在在进行一个项目,好久没写代码了,这个要与IOS进行交互,IOS那边生成的NSData数据,action需读取并保存,哪位能指点一下迷津,不要讲上传原理,原理我造 - -