KnockoutJs - 如何在afterkeydown之后限制绑定

时间:2014-07-11 00:14:55

标签: javascript jquery html mvvm knockout.js

我的工作是为了我的过滤功能。

<input data-bind="value: filterByName, valueUpdate:'afterkeydown'" />
 <div data-bind="foreach: filteredRecords"/>
</body>

现在我只需要throttle绑定filteredRecords或者延迟它{/ p>

我的视图模型看起来像这样

 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中扼要?

还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

如果我理解你的目标,那么你可能想要限制filterByName。这将阻止filteredRecordsfilterByName停止更改x毫秒之前收到通知。