MVVM架构~knockoutjs系列之级联select
对于下拉列表框的绑定在之前的knockoutjs文章中已经介绍过,今天主要说一下级联的select,事实上,在knockoutjs里,是以数据绑定为中心的,而数据是以面向对象为前提的,而对于级联绑定来说,它也是一种面向对象里关系对象的体现,有了关系对象,我们就可以把级联很容易的开发出来,而不用像之前JS那么麻烦了。
准备数据对象
var Grade_Subject_R = function () { var self = this; self.Grades = [ { 'subjects': [{ 'id': '1', 'name': '语文' }, { 'id': '2', 'name': '数学' }, { 'id': '3', 'name': '英语' }], 'arid': '1', 'name': '小学' }, { 'subjects': [{ 'id': '1', 'name': '语文' }, { 'id': '2', 'name': '数学' }, { 'id': '3', 'name': '英语' }, { 'id': '4', 'name': '物理' }, { 'id': '22', 'name': '化学' }, { 'id': '23', 'name': '生物' }], 'arid': '2', 'name': '初中' }, { 'subjects': [{ 'id': '1', 'name': '语文' }, { 'id': '2', 'name': '数学' }, { 'id': '3', 'name': '英语' }, { 'id': '4', 'name': '物理' }, { 'id': '22', 'name': '化学' }, { 'id': '23', 'name': '生物' }, { 'id': '24', 'name': '历史' }], 'arid': '3', 'name': '高中' } ]; self.grade = ko.observable(); self.subject = ko.observable(); /* 当前选中的年级ID为self.grade().id 当前选中的学科ID为self.subject().id HTML代码: <select data-bind=" options: Grades, optionsText: 'name', value:grade, optionsCaption: '选择年级'"> </select> <span data-bind="with:grade"> <select data-bind=" visible: $parent.grade, options: Subjects, optionsText: 'name', value:$parent.subject, optionsCaption: '选择学科'"> </select> </span> <span data-bind="with:grade"> <!-- ko foreach: Subjects --> <input type="checkbox" data-bind="value: id, checked: $root.subject" /> <span data-bind="text: name"></span> <!-- /ko --> </span> */ }
JS代码
var model = new Grade_Subject_R(); ko.applyBindings(model); for (var i in model.Grades) { if (model.Grades[i].arid == "2") { model.grade(model.Grades[i]); break; } }
HTML代码
<select data-bind=" options: Grades, optionsText: 'name', value:grade, optionsCaption: '选择年级'"> </select> <!-- ko with:grade --> <select data-bind=" visible:$parent.grade, options: subjects, optionsText: 'name', value:$parent.subject, optionsCaption: '选择学科'"> </select> <!-- /ko -->
效果截图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示