MVVM架(jia)構~knockoutjs系列之級聯select
對(dui)(dui)于下拉列表框的(de)(de)綁(bang)(bang)定(ding)在之(zhi)前的(de)(de)knockoutjs文章中已經介紹過,今天(tian)主(zhu)要說(shuo)(shuo)一下級聯(lian)的(de)(de)select,事(shi)實上,在knockoutjs里,是以(yi)數據綁(bang)(bang)定(ding)為(wei)中心的(de)(de),而(er)數據是以(yi)面向(xiang)對(dui)(dui)象(xiang)為(wei)前提的(de)(de),而(er)對(dui)(dui)于級聯(lian)綁(bang)(bang)定(ding)來說(shuo)(shuo),它也是一種面向(xiang)對(dui)(dui)象(xiang)里關系(xi)對(dui)(dui)象(xiang)的(de)(de)體現,有了(le)關系(xi)對(dui)(dui)象(xiang),我(wo)們就可以(yi)把級聯(lian)很容易的(de)(de)開發出來,而(er)不用像之(zhi)前JS那么麻煩了(le)。
準備數據對象
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(); /* 當前(qian)選(xuan)中(zhong)的年(nian)級(ji)ID為self.grade().id 當前(qian)選(xuan)中(zhong)的學科(ke)ID為self.subject().id HTML代碼(ma): <select data-bind=" options: Grades, optionsText: 'name', value:grade, optionsCaption: '選(xuan)擇年(nian)級(ji)'"> </select> <span data-bind="with:grade"> <select data-bind=" visible: $parent.grade, options: Subjects, optionsText: 'name', value:$parent.subject, optionsCaption: '選(xuan)擇學科(ke)'"> </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 -->
效果截圖