私は、データが結果をバインドする検索バーをafterkeydownを使ってグリッドに持っています。しかし、バインディングはあまりに早く起こっています。ユーザーは、結果が入力される前に1回だけキーを押す時間があります。私は結果がロードされている間、ページとのやりとりを妨げるブロックUI要素を持っているので、結果がロードされるまで検索クエリが1文字で停止します。Knockout.js delay valueUpdate:afterkeydown
rateLimitと呼ばれるノックアウトエクステンダーがあり、変更が停止してから指定された時間が経過するまでコールが遅れることがわかりましたが、「searchTerm」の定義に追加するときに何の違いも見られませんでした。私が使用すべき別の方法がありますか?
私は私の検索ボックス、「検索語」観測可能と場所、私のグリッドの結果をロードするために使われているの定義を提供しています
<input data-bind="value: searchTerm, valueUpdate: 'afterkeydown'" />
ノックアウト:
var app = app || {};
app.data = @Html.Raw(Json.Encode(Model));
app.CreateVM = function (data) {
var vm = {};
vm.searchTerm = ko.observable(data.Search);
...
}
vm.filterResults = function() {
app.getResultsList(vm.selectedItem(), vm.searchTerm(), vm.currentPage() + 1, vm.sortDirection(), vm.sortProperty(), updateGrid);
}
app.getResultsList = function (Id, searchTerm, pageIndex, sortDirection, sortProperty, callBack) {
$.ajaxCall({
url: $('#clientGrid').data('url'),
type: 'GET',
dataType: 'json',
data: {
Id: Id,
pageIndex: pageIndex,
sortDirection: sortDirection,
sortProperty: sortProperty,
filter: searchTerm
},
...
}
この遅延時間は入力イベントにのみ適用されるのではなく、観測値の値をプログラムによって更新した場合でも適用されます。 – Hp93