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 -->
复制代码

效果截图

返回目录

 

posted @   张占岭  阅读(7539)  评论(4编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示