从数组级联下拉
MVC knockout Cascading dropdown from arrays
新的Knockout,将我的MVC应用程序从使用Telerik MVC组合框迁移到Knockout。我使用Ajax生成两个数组,并使用以下命令将它们绑定到Knockout select:
<select data-bind='options: myFirstList, optionsText: "Text", optionsCaption: "Select...", value: 0'> </select>
<select data-bind='options: mySecondList, optionsText: "Text", optionsCaption: "Select...", value: 0'> </select>
function myViewModel() {
this.myFirstList = ko.observableArray([]);
this.mySecondList = ko.observableArray([]);
}
var objVM = new myViewModel();
ko.applyBindings(objVM);
Using Ajax:
$.ajax({
url: '/Home/CheckWord',
type: 'POST',
data: {
cword: wordtocheck
},
success: function (data) {
.....
}
objVM.mySecondList(stateList[0]);
var fnArray = [];
for (var k = 0; k < data.fnList.length; ++k) {
fnArray[k] = { Text: data.fnList[k], Value: k };
}
objVM.myFirstList(fnArray);
},
error: function () {
alert("n");
}
});
不知道如何根据从第一个列表中选择的项更改第二个选择列表,以及如何使用从第二个列表中选择的项触发Javascript操作。如果有人能给我举个例子,我将不胜感激。
在HTML中,将'value'绑定到observable
<select data-bind='options: myFirstList, optionsText: "Text",
optionsCaption: "Select...", value: myFirstListSelected'> </select>
<select data-bind='options: mySecondList, optionsText: "Text",
optionsCaption: "Select...", value: mySecondListSelected'> </select>
在JS中,使用subscribe来监听模型的change事件
function myViewModel() {
var self = this;
self.myFirstList = ko.observableArray([]);
self.mySecondList = ko.observableArray([]);
self.myFirstListSelected = ko.observable();
self.mySecondListSelected = ko.observable();
// when first selected changes
self.myFirstListSelected.subscribe(function(newVal) {
// ignore blank selection
// or you can clear second list when user deselects first one.
// if (newVal == null) {
// self.mySecondListSelected(undefined);
// self.mySecondList.removeAll();
// return;
// }
if (newVal == null) return;
$.ajax({
//...
data: { cword: newVal },
success: function (data) {
//...
// clear selected
self.mySecondListSelected(undefined);
// reload second list
self.mySecondList(stateList[0]);
//...
}
//...
});
});
// when second selected changes
self.mySecondListSelected.subscribe(function(newVal) {
//... beware newVal could be null or undefined when user deselects it.
});
}
相关文章:
- 我需要帮助在 javascript 中将 JSON 数据转换为 3 级多维数组
- 根据条件 JavaScript 在父级下对类似的数组项进行分组
- 通过JSON限制数组子级值
- javascript递归,按数组位置查找子级
- 响应字段包含一个子级时的节点 SOAP 强制数组
- 通过带有对象子级的数组进行 React 本机映射 - 工作方式与在 react web 中不同
- JSON嵌套“;第n级”;对象数组转换为多维数组
- Node.js-内联推送到数组
- 如何在没有递归的情况下迭代n级深度的数组
- 使用对象数组填充,并使用jQuery过滤级联下拉列表
- 迭代一个3级嵌套数组并选择内部数组的值
- 从数组级联下拉
- angular $inject属性和内联数组注释的区别
- 过滤器数组递归查找父级
- knockoutjs:计算级联数组(复杂视图模型)中的可观察性和this指针
- N级层次结构数组Angular JS
- 如何将JavaScript数组传递到PHP生成的内联函数调用中
- Angularjs用json对象数组串级下拉
- 在级联下拉所依赖的数组中间添加一个值
- Backbone.Model save -- 返回的模型的子级是数组而不是 Backbone.Collection