【发布时间】:2014-09-01 12:31:17
【问题描述】:
我的过滤功能是这样工作的。
<input data-bind="value: filterByName, valueUpdate:'afterkeydown'" />
<div data-bind="foreach: filteredRecords"/>
</body>
现在我只需要throttle 绑定filteredRecords 或对其进行延迟
我的视图模型是这样的
self.filteredRecords= ko.computed(function () {
return getRecordByStatus(1);
});
self.filterByName= ko.observable("");
var getRecordByStatus = function (status) {
var periodRecord, filtered = [];
if (self.timesheetApprovalResponse().periods) {
// period filtering
if (self.selectedPeriod()) {
periodRecord = _.find(self.timesheetApprovalResponse().periods, function(p) {
return p.fromDate === self.selectedPeriod().key;
});
if (periodRecord) {
filtered = _.where(periodRecord.timesheets,
function(t) {
return t.status === status;
});
}
}
}
if (self.filterByName()) {
filtered = _.where(filtered,
function (t) {
console.log(t.name.toLowerCase() + "-" + self.filterByName().toLowerCase());
return t.name.toLowerCase().indexOf(self.filterByName().toLowerCase()) > -1;
});
}
return filtered;
};
现在我的问题是把.extend({ throttle: 500 });放在哪里
我想我不能把它放在filteredRecords 上,因为它也会在Page Load 上节流?
还有其他想法吗?
【问题讨论】:
-
如果我明白你在追求什么,那么你可能想要限制
filterByName。这将阻止filteredRecords收到通知,直到filterByName停止更改 x 毫秒。 -
是的!这就是我需要做的!如果您将其作为答案提供,请记下它。
标签: javascript jquery html mvvm knockout.js