当淘汰赛中其他可观察值发生变化时,更新可观察值

sea*_*g0n 0 knockout.js

我有以下观点:

<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>
Run Code Online (Sandbox Code Playgroud)

我有以下视图模型:

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
    })
}
Run Code Online (Sandbox Code Playgroud)

我的要求是,只要用户输入一个新值或更改值Company Name,Phone Number,User NameDatabase Location文本框,我必须设置DoFilterOnFilteredData值设置为false.我怎样才能做到这一点?我认为这可以使用计算的observable.

PS:如果可能的话,请提供一个小提琴.

编辑:

JSFiddle:http://jsfiddle.net/seadrag0n/dytre/

Dia*_*sar 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);      
});
Run Code Online (Sandbox Code Playgroud)

更新:

这是你的小提琴的修改工作版本:http: //jsfiddle.net/DianaNassar/dytre/4/

  • +1,但可以缩短为一个外部单行函数:`self.DoFilterOnFilteredData(!! value);`. (2认同)