2

该代码可以在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');

        }
};

由于某种原因,它没有被解雇。任何人都可以帮助我。

谢谢你在先进

4

2 回答 2

0

你的小提琴有几个问题:

  1. 您绑定到值而不是可观察对象。当你写<input type="text" data-bind="value: global.filterViewModel().Name()" placeholder="Filter by Name"/>ko 使用global.filterViewModel().Namenot the observable 的值。因此没有真正的绑定(更新ko不会更新接口,更新接口不会更新ko)。您需要删除最后一个括号:global.filterViewModel().Name
  2. 您在绑定中放置名称而不是代码,反之亦然
  3. 您订阅了 FilterViewModel 的更改,但不是子可观察更改。为此,请在计算的 observable 中包含对子 observable 的评估:

-

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/

于 2014-05-01T09:20:44.390 回答
0

您需要使用如下语句实例化您的视图模型:

var model = new BankViewModel();

当模型被实例化时,它的计算方法首先被评估。这就是你的alert意志激发的地方。

但是,我假设您希望您的计算方法订阅 Name、Code 和 Number 属性。在这种情况下,您需要在计算方法中至少读取一次这些属性。

这就是依赖跟踪在 KO 中的工作方式。它记录您在计算函数中提到的所有可观察值并记录它们。当这些可观察值之一更新时,您的计算值会再次被评估。

对于您的代码,您的计算将订阅FilterViewModel不订阅其各个属性 NameCodeNumber。因此,如果您需要订阅这些单独属性的更改,则必须在计算函数中单独提及它们。好吧,如果它们不影响您的计算函数,那么让您的计算订阅它们是没有意义的。

如果您想了解该过程的工作原理,请查看其文档: http: //knockoutjs.com/documentation/computedObservables.html

于 2014-04-30T19:36:29.683 回答