MVVM架构~knockoutjs系列之包括区域级联列表的增删改

返回目录

这个例子我做了几次,之前总是有BUG,目前测试后,确定没有BUG才发上来的,主要功能是实现“我的银行”模块的增删改的功能,这个里面包括了级联列表的区域选择,这部分是难点,在开发过程中,我们应该知道一个概念,在knockoutjs里,如果你的select被绑定了optionsValue属性,那么它将存储这个普通的字符,而如果你没有设置optionsValue,那么它存储的是JS对象

Html代码

<script src="/Scripts/areaData.js"></script><div id="bankDiv"><div data-bind="foreach:bankList"><ul style="float: left;"><li><b>银行开户名:</b><span data-bind="text:BankAccountName"></span></li><li><b>开户行所在城市:</b><select disabled="disabled" data-bind="
                                                 options: areaData,optionsText: 'Name',value:Province,optionsCaption: '选择省份'"></select><span data-bind="with:Province"><select disabled="disabled" data-bind="
                                                     visible:$parent.Province,options: Sons,optionsText: 'Name',value:$parent.City,optionsCaption: '选择城市'"></select></span><span data-bind="with:City"><select disabled="disabled" data-bind="
                                                    visible:$parent.City,options: Sons,optionsText: 'Name',value:$parent.District,optionsCaption: '选择区县'"></select></span></li><li><b>银行名称:</b><span data-bind="text:BankName"></span></li><li><b>支行名称:</b><span data-bind="text:BankAddress"></span></li><li><b>银行账号:</b><span data-bind="text:BankAccountNumber"></span></li><li><a href="javascript:;" data-bind="click:$parent.removeLine">删除</a>&nbsp;&nbsp;<a href="javascript:;" data-bind="click:$parent.edit">编辑</a></li></ul></div><div style="clear: both;"><a href="javascript:;" data-bind="click:add">添加银行</a></div><div data-bind="with:selectItem,visible:editing()"><ul><li><b>正在<span data-bind="if:UserBankID==0">新建</span><span data-bind="if:UserBankID>0">编辑</span>银行</b></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;银行开户名:<input type="text" data-bind="value:BankAccountName" /></li><li>开户行所在城市:<select data-bind="
                                 options: areaData,optionsText: 'Name',value:Province,optionsCaption: '选择省份'"></select><span data-bind="with:Province"><select data-bind="
                                   visible:$parent.Province,options: Sons,optionsText: 'Name',value:$parent.City,optionsCaption: '选择城市'"></select></span><span data-bind="with:City"><select data-bind="
                                  visible:$parent.City,options: Sons,optionsText: 'Name',value:$parent.District,optionsCaption: '选择区县'"></select></span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;银行名称:<input type="text" data-bind="value:BankName" /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;支行名称:<input type="text" data-bind="value:BankAddress" /></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;银行账号:<input type="text" data-bind="value:BankAccountNumber" /></li></ul><input type="button" data-bind="click:$parent.save" value="保存" /><input type="button" data-bind="click:$parent.cancle" value="取消" /></div>
</div>

JS代码,注意,为了测试方便,我将AJAX与数据交换的代码全都注释了

<script type="text/ecmascript">//银行实体可以从数据库中读出来的,所以不存储ko对象var BankEntity = function (UserBankID,Province,City,District,BankName,BankAccountName,BankAccountNumber,BankAddress,IsAdd) {this.UserBankID = UserBankID;this.Province = Province;this.City = City;this.District = District;this.BankName = BankName;this.BankAccountName = BankAccountName;this.BankAccountNumber = BankAccountNumber;this.BankAddress = BankAddress;this.IsAdd = IsAdd;}//银行对象var Bank = function (UserBankID,Province,City,District,BankName,BankAccountName,BankAccountNumber,BankAddress,IsAdd) {this.UserBankID = UserBankID;this.Province = ko.observable(Province);this.City = ko.observable(City);this.District = ko.observable(District);this.BankName = BankName;this.BankAccountName = BankAccountName;this.BankAccountNumber = BankAccountNumber;this.BankAddress = BankAddress;this.IsAdd = IsAdd;}//我的银行操作var bankEditor = function () {var self = this;var dataArr = [];dataArr.push(new BankEntity(1, "北京市", "市辖区", "石景山区", "bank", "user", "110", "beijing"));dataArr.push(new BankEntity(2, "安徽省", "安庆市", "大观区", "bank2", "user2", "110", "beijing"));var selDataArr = [];var p, c, d;for (var data in dataArr) {for (var i in areaData) {if (areaData[i].Name == dataArr[data].Province) {for (var j in areaData[i].Sons) {if (areaData[i].Sons[j].Name == dataArr[data].City) {for (var k in areaData[i].Sons[j].Sons) {if (areaData[i].Sons[j].Sons[k].Name == dataArr[data].District) {selDataArr.push(new Bank( dataArr[data].UserBankID, areaData[i],areaData[i].Sons[j],areaData[i].Sons[j].Sons[k],dataArr[data].BankName,dataArr[data].BankAccountName,dataArr[data].BankAccountNumber,dataArr[data].BankAddress,false));break;}}}}}}}self.bankList = ko.observableArray(selDataArr);self.selectItem = ko.observable();self.editing = ko.observable(false);//移除同时提交self.removeLine = function (o) {self.bankList.remove(o);}//添加self.add = function () {self.editing(true);self.selectItem(new Bank(0, "", "", "", "银行名称", "开户名", "账号", "支行名称", true));};//编辑self.edit = function (o) {self.editing(true);self.bankList.remove(o)//将上面的实体移除o.IsAdd = false;self.selectItem(o);};//postself.save = function (o) {/*数据传递时,使用字符串或者数值,而在knockoutjs显示时,使用完整对象*/if (o.Province() == undefined || o.City() == undefined || o.District() == undefined) {alert("请选择区域信息");return false;}self.editing(false);/*地域显示为文本*/self.bankList.push(o);//将编辑后的实体添加
};self.cancle = function (o) {if (!o.IsAdd)self.bankList.push(o);self.editing(false);};}var bankModel = new bankEditor()ko.applyBindings(bankModel, document.getElementById("bankDiv"));</script>

截图如下

返回目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABP Vnext 4.4:统一Ef Core的DbContext/移除EF Core Migrations项目

Abp vnext 4.4出现了一个比较重大的变更&#xff1a;在Startup template中移除了EF Core Migrations项目&#xff0c;本文翻译自community.abp.io/articl由于本文发布的时候Abp vnext的版本还没有到4.4&#xff0c;所以本文演示了如何从4.4以前的版本移除EntityFrameworkCore.D…

史上最变态高考数学题,让99%的考生献上膝盖,看完我惊了......

全世界只有3.14 %的人关注了青少年数学之旅今天超模君想问大家一个问题&#xff1a;如果在撒哈拉大沙漠或者是西伯利亚上建造一个大型装置&#xff0c;以便向地球之外的其他星球的朋友们表明地球上存在有智慧的生命&#xff0c;最适当的装置是什么呢&#xff1f;勾股定理&#…

JS实现sleep功能 JS遍历document对象

标题&#xff1a;JS实现sleep功能 JS遍历document对象/*****************************************/ var elementName; function countTotalElement(node) { if(node.nodeType 1) { elementName elementName node.nodeValue "\r\n"; } …

C#操作Excel文件暨C#实现在Excel中将连续多列相同数据项合并

C#操作Excel文件(读取Excel&#xff0c;写入Excel) 看到论坛里面不断有人提问关于读取excel和导入excel的相关问题。闲暇时间将我所知道的对excel的操作加以总结&#xff0c;现在共享大家&#xff0c;希望给大家能够给大家带了一定的帮助。另外我们还要注意一些简单的问题1.exc…

#if DEBUG 和 if (env.IsDevelopment()) 的用法区别

咨询区 webwake&#xff1a;我发现预处理指令 #if DEBUG 和 Asp.NET Core环境变量名 都可以用于区分 debug/development 和 release/production 下的不同行为&#xff0c;请问他们都有哪些合适的应用场景&#xff1f;比如说某些场景下应该使用 预处理指令 而不是 环境变量 &…

数据结构 【实验3 链表基本操作】

实验3 链表基本操作 实验目的 1&#xff0e; 定义单链表的结点类型。 2&#xff0e; 熟悉对单链表的一些基本操作和具体的函数定义。 3&#xff0e; 通过单链表的定义掌握线性表的链式存储结构的特点。 4&#xff0e; 掌握循环链表和双链表的定义和构造方法。 实验内容 该…

第一次找工作感受!

20号南京有招聘会,我和几个同学就去了,去体验一下找工作是什么样子的,可能大家从第二天的报纸上已经看到了,不过如果你没有去现场,那种人山人海,直接要排山倒海,招聘单位写的什么基本上看不清了.. 转到上午10点一份没投,心里那个急,心想只要能要就行了,好像投出去就找到工作一样…

猪肉上的红章和蓝章有啥不同?| 今日趣图

全世界只有3.14 %的人关注了青少年数学之旅亲眼看到金字塔你才会意识到它有多大&#xff01;&#xff08;图源光消失的地方&#xff0c;侵权删&#xff09;你女朋友的脸皮有多厚&#xff1f;&#xff08;图源程序员新视界&#xff0c;侵权删&#xff09;猪肉上的红章和蓝章有啥…

CSS工具列表

用户界面 I Like Your Color输入URL然后它会抓出其中的颜色并用16进制表示。CSS Multi-element Rollover Generator使用CSS和一个图片创建出一个翻转按钮的样式。CSS Rounded Box GeneratorRuthsarian Layouts6个CSS页面布局模板&#xff0c;包括颜色、标题等。Bluerobot Layou…

【开源】这可能是封装微信 API 最全的 .NET SDK 了

缘起今年公司某个项目需要全面接入微信支付 V3 版 API。起初觉得&#xff0c;2014 年微信支付就已上线了 V3 版 API&#xff0c;这都 2021 年了&#xff0c;就算官方不给力&#xff0c;怎么着社区也该有几个造好的 .NET 的轮子了吧&#xff1f;于是兴冲冲地到 NuGet 上开始搜索…

【Vegas原创】变换VS2005默认浏览器方法

右键任何aspx文件&#xff0c;在浏览方式中选择

如何避免和人尬聊?

全世界只有3.14 %的人关注了青少年数学之旅想要和别人有聊不完的话题&#xff1f;当然是多读书多看新闻了解新鲜有趣的事物啦如果你没有时间去阅读那么关注以下公号将会让你收获更多信息~长按二维码&#xff0c;选择“识别图中二维码”订阅。▼看鉴ID:kanjian6666▲长按二维码“…

java 中的 io 系统总结

Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符&#xff0c;分别操作字符、字符数组或字符串&#xff0c;而字节流处理单元为 1 个字节&#xff0c;操作字节和字节数组。 Java 内用 Unicode 编码存储字符&#xff0c;字符流处理类负责将外部的…

在VS Code中执行SQL查询,是怎样一种体验?

上次&#xff0c;我们演示了“如何使用Nuget包XPlot.Plotly.Interactive在.NET Interactive notebook中绘制图表”。这次&#xff0c;我们使用Nuget包Microsoft.DotNet.Interactive.SqlServer演示在.NET Interactive notebook中如何和SQL Server交互。安装Nuget包首先&#xff…

UVA 11090 Going in Cycle!! 二分答案 + bellman-ford

求平均值最小的环&#xff0c;如果平均值最小为x&#xff0c;则如果把每条边的权值都减(x1)&#xff0c;那么新图将会有负环&#xff0c;用bellman ford判断。 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstri…

突发奇想:flash+.Net+数据库的一种构思

大家好!我是冯波!一个刚刚学了点编程的小伙子&#xff0c;爱好比较广泛。除了像其它男生那样喜欢踢足球&#xff0c;打篮球以外&#xff0c;自己也非常喜欢军事。什么《孙子兵法与三十六计》啊&#xff0c;《三国演义》啊总是百看不厌&#xff0c;就是没看过《武穆遗书》&#…

大数据:数据合集,你想要的或许这里都有

大数据时代&#xff0c;用数据做出理性分析显然更为有力。做数据分析前&#xff0c;能够找到合适的的数据源是一件非常重要的事情&#xff0c;获取数据的方式有很多种&#xff0c;不必局限。下面将从公开的数据集、爬虫、数据采集工具、付费API等等介绍。给大家推荐一些能够用得…

骗人的数学题,那消失的1块钱到底被谁拿走了

全世界只有3.14 %的人关注了青少年数学之旅1、失踪的正方形

小语

1. 正所谓圣人云&#xff1a;“无农不稳&#xff0c;无商不富”&#xff0c;“民无利则国不富&#xff0c;民不富则国无税&#xff0c;国无税则兵不强&#xff0c;兵不强则天下危”。 2. 播下一个行动&#xff0c;收获一种习惯&#xff1b;播下一种习惯&#xff0c;收获一种性格…