我有以下观点:
<div class="form-group">
<label>Company Name</label>
<input type="text" class="form-control" data-bind="text: $root.CompnayNameFilter">
</div>
<div class="form-group">
<label>Phone Number</label>
<input type="text" class="form-control" data-bind="text: $root.PhoneNumberFilter">
</div>
<div class="form-group">
<label>User Name</label>
<input type="text" class="form-control" data-bind="text: $root.UsernameFilter">
</div>
<div class="form-group">
<label>Database Location</label>
<input type="text" class="form-control" data-bind="text: $root.DatabaseLocationFilter">
</div>
我有以下视图模型:
var viewModel = {
CompnayNameFilter: ko.observable(),
PhoneNumberFilter: ko.observable(),
UsernameFilter: ko.observable(),
DatabaseLocationFilter: ko.observable(),
DoFilterOnFilteredData:ko.computed(function(){
// code to update DoFilterOnFilteredData to false when any other observable changes
})
}
我的要求是,无论何时用户输入新值或更改Company Name
,Phone Number
,User Name
和Database Location
文本框中的值,我都必须设置{ {1}}值为false。我怎样才能做到这一点?我认为这可以使用计算的observable。
修改
JSFiddle:http://jsfiddle.net/seadrag0n/dytre/
答案 0 :(得分:5)
您可以使用subscribe
函数实现此目的:
self.CompnayNameFilter.subscribe(function (value) {
self.DoFilterOnFilteredData(!!value);
});
self.PhoneNumberFilter.subscribe(function (value) {
self.DoFilterOnFilteredData(!!value);
});
self.UsernameFilter.subscribe(function (value) {
self.DoFilterOnFilteredData(!!value);
});
self.DatabaseLocationFilter.subscribe(function (value) {
self.DoFilterOnFilteredData(!!value);
});
更新:
这是你的小提琴的修改工作版本: http://jsfiddle.net/DianaNassar/dytre/4/
答案 1 :(得分:1)
这是完整的工作示例。
jsiddle:http://jsfiddle.net/CodingDawg/dytre/3/
var viewModel = {
DoFilterOnFilteredData: ko.observable('true'),
CompnayNameFilter: ko.observable(),
PhoneNumberFilter: ko.observable(),
UsernameFilter: ko.observable(),
DatabaseLocationFilter: ko.observable(),
}
$(function () {
var handler = function (value) {
viewModel.DoFilterOnFilteredData( !! value);
}
viewModel.CompnayNameFilter.subscribe(handler);
viewModel.PhoneNumberFilter.subscribe(handler);
viewModel.UsernameFilter.subscribe(handler);
viewModel.DatabaseLocationFilter.subscribe(handler);
ko.applyBindings(viewModel);
});