Mik*_*lls 7 cascadingdropdown knockout.js knockout-subscribe
我有一组级联下拉列表,用于选择房屋地址.我们按此顺序拆分地址:
我正在使用knockout来生成通过REST查询从数据库中提取的下拉列表中的值.我有这个工作得很好,除了一个边缘情况.
首先让我告诉你一些关于地址的信息(当它们像这样分开时).总有一个街道名称,总有一个街道号码.并不总是使用后缀和方向.所以我可能有一个100 Savanna South(Savanna South是街道名称),或101 Main St.我假设后缀和方向改变了这些场景.
问题是,当我从第10位切换到第11位时.它们都只有一个后缀"街道",并且只有一个"西方"方向.当我进行更改时,后缀和方向不会更改,这不会触发相应的订阅以提取下一组数据.因此,如果我从10日改为11日,则房屋号码不会更新.
function AddViewModel() {
/* Address */
self.StreetName = ko.observable('');
self.StreetNames = ko.observableArray([""]);
self.StreetName.subscribe(function (val) {
if ((val !== undefined && val !== null && val !== '') && val !== viewModel.StreetType()) {
getStreetTypes(val);
}
});
self.StreetType = ko.observable('');
self.StreetTypes = ko.observableArray([]);
self.StreetType.subscribe(function (val) {
if (val !== undefined && val !== null && val !== '') {
alert("I changed to " + val);
getStreetDirections(self.StreetName, val);
}
});
self.StreetDirection = ko.observable('');
self.StreetDirections = ko.observableArray([]);
self.StreetDirection.subscribe(function (val) {
if (val !== undefined && val !== null && val !== '') {
getStreetNumbers(self.StreetName, self.StreetType, val);
}
});
self.StreetNumber = ko.observable('');
self.StreetNumbers = ko.observableArray([]);
self.StreetNumber.subscribe(function (val, e) {
if (val !== undefined && val !== null && val !== '') {
$.get('/api/gis/addressview/getaddress',
{ streetName: $('#StreetName').val(), streetType: $('#StreetType').val(), streetDirection: $('#StreetDirection').val(), streetNumber: val },
function (result) {
loadAddresses(result);
}, 'json');
}
});
}
// Get the street types
function getStreetTypes(streetName) {
$.get('/api/gis/cascadingaddress/getstreettypes', { streetName: streetName }, function (result) {
viewModel.StreetTypes(result);
// If there is only one street type, load it.
if (result.length === 1) {
if (result[0] !== "" && result[0] !== " ") {
viewModel.StreetType(result[0]);
viewModel.StreetType.notifySubscribers();
} else {
getStreetDirections(streetName, result[0]);
viewModel.StreetType.notifySubscribers();
}
}
}, 'json');
}
function getStreetDirections(streetName, streetType) {
$.get('/api/gis/cascadingaddress/getstreetdirections', { streetName: streetName, streetType: streetType }, function (result) {
viewModel.StreetDirections(result);
// If there is only one street direction, load it
if (result.length === 1) {
if (result[0] !== "" && result[0] !== " ") {
viewModel.StreetDirection(result[0]);
viewModel.StreetDirection.valueHasMutated();
} else {
getStreetNumbers(streetName, streetType, result[0]);
viewModel.StreetDirection.valueHasMutated();
}
}
}, 'json');
}
function getStreetNumbers(streetName, streetType, streetDirection) {
$.get('/api/gis/cascadingaddress/getstreetnumbers', { streetName: streetName, streetType: streetType, streetDirection: streetDirection }, function (result) {
viewModel.StreetNumbers(result);
}, 'json');
}
Run Code Online (Sandbox Code Playgroud)
我一直在尝试从$.trigger('change')在场上执行jQuery 到上面添加的内容.valueHasMutated().我可以写代码,精心检查,如果街道名称变了,但后缀和方向也没有,然后重新加载街道号码,但我想,如果能够保持订阅框架内.
有人能指出我正确的方向要么触发.subscribe()功能还是如何采取另一种方法?
注意:鉴于REST端点位于专用网络中且不可公开,我实际上无法执行JSFiddle.否则我会提供一个.
| 归档时间: |
|
| 查看次数: |
4138 次 |
| 最近记录: |