可以在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/

09-16 14:02