如果我有我的模特
function SearchModel() {
this.SearchCriteria = "";
}
并且在我的代码中有:
model.SearchCriteria = data;
ko.applyBindings(model);
然后在我的html中:
<select id="vehiclesMake" data-bind="options: SearchCriteria.Tool.VehicleMakes, optionsText: 'Description', value: SearchCriteria.Tool.SelectedModel, optionsCaption: 'Choose...'"></select>
所有这些都很好。我的下拉列表按预期填充。
现在我遇到的问题是我添加:
$('#vehiclesMake').change(function () {
loadSearchTool();
});
loadSearchTool()执行的操作:
loadSearchTool = function () {
var postCode = $('#postcode').val();
var distance = $('#distance').val();
var make = $('#vehiclesMake').val();
var makemodel = $('#makemodel').val();
var minPrice = $('#minPrice').val();
var maxPrice = $('#maxPrice').val();
data.getQuickSearch(postCode, distance, make, makemodel, minPrice, maxPrice, function (data) {
//our success function
console.log(data.Result);
if (data.Result == 'Fail') {
console.log('Fail');//TO DO
}
else {
model.SearchCriteria = data;
ko.applyBindings(model);
}
}, function () {
console.log('error');//TO DO
});
};
使用上面的所有代码,当loadsearchtool(也称为pageload)绑定到下拉列表时,.change()代码会被触发,我最终会进入无限循环。
我该如何解决这个问题?这是我在knockoutjs的第一次破解,所以我有点新手。
答案 0 :(得分:1)
您只需将ko.applyBindings(model);
移到loadSearchTool()
之外。 ko.applyBindings只应调用一次(例如从$(document).ready()
开始)。
您可能还想将SearchCriteria更改为observable:
this.SearchCriteria = ko.observable("");
更新数据使用:
model.SearchCriteria(data);