ビューのすべてのチェックボックスをチェックするために、このコードを使用しています。
var checked = self.includeAllInSoundscript();
var contents = self.filterContents(self.getFilters());
for (var i = 0; i < contents.length; i++) {
contents[i].includeInSoundscript(checked);
}
return true;
チェックボックス
<input type="checkbox" data-bind="checked: includeInSoundscript" title="sometitle" />
内容はこうです。
(function (ko) {
ContentViewModel = function (data) {
this.orderId = data.orderId;
this.contentReferenceId = ko.observable(data.contentReferenceId);
this.includeInSoundscript = ko.observable();
});
これはフィルタ メソッドです。
self.getFilters = function() {
var filterOrders = $.grep(self.orders(), function (order) {
return (order.usedInfilter());
});
var filterLocations = $.grep(self.locations(), function (location) {
return (location.usedInfilter());
});
return { orders: filterOrders, locations: filterLocations };
};
self.filterContents = function (filter) {
var filteredArray = self.contents();
if (filter.orders.length > 0) {
filteredArray = $.grep(filteredArray, function (content) {
return $.grep(filter.orders, function (order) {
return (order.orderId == content.orderId);
}).length > 0;
});
}
if (filter.locations.length > 0) {
filteredArray = $.grep(filteredArray, function (content) {
return $.grep(filter.locations, function (location) {
return $.inArray(location.location, content.orderedFrom().split('/')) != -1;
}).length > 0;
});
}
return filteredArray;
};
すべてのチェックボックスをオンにするのは高速ですが、オフにすると最大 20 秒かかる場合があります。奇妙なことに、フィルタリングされた結果が小さい場合、フィルタリングされた結果が合計 1000 セットから約 40 であっても、まだ少し時間がかかります。
チェックボックスはテーブル内にあり、data-bind="foreach: contents" を使用してバインドされています
「不要な」オブザーバブルの一部を削除しました。変更されない可能性が最も高いプロパティについては、動作がわずかに改善されますが、特に Firefox では非常に遅くなります。大きな問題は、なぜこの動作がチェックボックスのチェックを外したときだけで、フィルタリング、並べ替え、チェックなどでは行われないのかということです.
注意:基本的に「チェック済み」がfalseの場合はチェックボックスのチェックを外すだけで、それ以外の場合は高速です。
編集:一度に 50 個のアイテムしか表示していませんが、フィルターされたすべてのアイテムをチェック/チェック解除しています。これにより、サーバーに投稿する内容を制御できます。