代码可以在 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');
}
};
由于某种原因,它没有被解雇。谁能帮帮我吗?
提前致谢
最佳答案
您的 fiddle 有几个问题:
- 您绑定(bind)到值而不是可观察值。当你写
<input type="text" data-bind="value: global.filterViewModel().Name()" placeholder="Filter by Name"/>
时ko 使用global.filterViewModel().Name
的值不是可观察到的。因此没有真正的绑定(bind)(更新ko不会更新接口(interface),更新接口(interface)也不会更新ko)。您需要删除最后一个括号:global.filterViewModel().Name
- 您在绑定(bind)中输入名称而不是代码,反之亦然
- 您订阅了 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/
关于javascript - Knockout js 计算未被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23396099/