これを機能させるには、別のスレッドで長い操作を実行する必要があります。関数を使用してこれを行うか、これsetTimeout
には派手なサードパーティのライブラリを使用できます。ここに簡単な解決策があります:
var cheeseViewModel = function() {
var self = this;
self.englishOnly = ko.observable(false);
self.filtering = ko.observable(false);
self.cheeses = ko.observableArray([]);
self.cheeses.push(new cheese('Camembert', false));
self.cheeses.push(new cheese('Stilton', true));
self.cheeses.push(new cheese('Brie', false));
self.cheeses.push(new cheese('Appenzeller', false));
self.cheeses.push(new cheese('Wensleydale', true));
self.selectedCheeses = ko.observableArray(self.cheeses());
self.englishOnly.subscribe(function() {
self.filtering(true);
setTimeout(function() {
var filteredCheeses = ko.utils.arrayFilter(self.cheeses(), function(cheese) {
createSlowness();
return cheese.madeInEngland || !self.englishOnly();
});
self.selectedCheeses(filteredCheeses);
self.filtering(false);
}, 20);
});
ここにフィドルが働いています:http://jsfiddle.net/pSzSw/6/