可以在http://jsfiddle.net/6kMWM/10/上找到该代码。
在FilterViewModel中,我正在创建一个可观察的对象。
var FilterViewModel= ko.observable({
Name: ko.observable("test"),
Code: ko.observable("test"),
Number: ko.observable("test")
});
然后在BankViewModel中,我正在运行一个计算方法,当任何输入框发生更改时,都应触发该方法。
var BankViewModel = function(){
var self = this;
self.Collection = ko.observableArray([]),
self.filteredCollection = ko.computed(function () {
var filter = FilterViewModel();
alert("invoked");
}),
self.add = function (bankObject) {
self.Collection.push(bankObject);
},
self.isSelected = function (data) {
$('.bank').css('background-color', 'white');
$('.bank p').css('color', '#333');
$('#bank-row-' + data.Code()).css('background-color', 'blue');
$('#bank-row-' + data.Code()+" p").css('color', 'white');
}
};
由于某种原因,它没有被解雇。谁能帮我一个忙。
谢谢高级
最佳答案
您的小提琴有几个问题:
您绑定到值而不是可观察值。编写<inputtype="text" data-bind="value: global.filterViewModel().Name()"placeholder="Filter by Name"/>
时,ko使用的是global.filterViewModel().Name
的值,而不是可观察到的值。因此没有真正的绑定(更新ko将不会更新接口,更新接口将不会更新ko)。您需要删除最后一个括号:global.filterViewModel().Name
您在绑定中放置名称而不是代码,反之亦然
您订阅了FilterViewModel的更改,但不是子级可观察的更改。为此,请将子可观察值的评估包括在您计算的可观察值中:
--
self.filteredCollection = ko.computed(function () {
var filter = FilterViewModel();
if (filter.Name() != 'testname')
alert("name");
if (filter.Code() != 'testcode')
alert("code");
if (filter.Number() != 'testnumber')
alert("number");
}),
您可以在这里测试http://jsfiddle.net/b37tu/1/