Javascript 击倒。如何在可观察到的更新前后执行自定义代码

Javascript 击倒。如何在可观察到的更新前后执行自定义代码,javascript,html,knockout.js,Javascript,Html,Knockout.js,我有一个显示在页面中的用户数组。我有一对输入文本框来过滤按姓名和姓氏显示的用户。 我希望当输入文本字段中的任何值发生更改时,用户数组都会更新 以下是我必须实现的代码: 淘汰视图模型: function HomeViewModel() { var self = this; self.users = ko.observableArray([]); self.FilterByName = ko.observable(''); self.FilterByLastNam

我有一个显示在页面中的用户数组。我有一对输入文本框来过滤按姓名和姓氏显示的用户。 我希望当输入文本字段中的任何值发生更改时,用户数组都会更新

以下是我必须实现的代码:

淘汰视图模型:

function HomeViewModel() {
    var self = this;

    self.users = ko.observableArray([]);

    self.FilterByName = ko.observable('');
    self.FilterByLastName = ko.observable('');

    self.FilteredUsers = ko.observableArray([]);
    self.FilteredUsersComputed = ko.computed(function () {
        var result = self.users().filter(function (user) {
            return (user.name.toUpperCase().includes(self.FilterByName().toUpperCase()) &&
                user.lastName.toUpperCase().includes(self.FilterByLastName().toUpperCase())
            );
        });
        self.FilteredUsers(result);
    });

    $.getJSON("/api/User", function (data) {            
        self.users(data);
    });
}

ko.applyBindings(new HomeViewModel());
HTML:

多谢各位

延迟FilteredUsers计算函数的执行,使其不会在每次按下Name或Lastname字段中的键时触发。i、 e:等待2秒钟,直到没有按键事件;或者在kepress后等待1或2秒以执行计算的函数

看。另外,最好让一台计算机可以观察到,只返回计算值,而不是设置一个单独的可观察值

self.FilteredUsers = ko.computed(function () {
    var result = self.users().filter(function (user) {
        return (user.name.toUpperCase().includes(self.FilterByName().toUpperCase()) &&
            user.lastName.toUpperCase().includes(self.FilterByLastName().toUpperCase())
        );
    });
    return result;
}).extend({ rateLimit: {timeout: 2000, method: "notifyWhenChangesStop"} });
触发FilteredUsers时,首先淡入LLAdminBodyMain,然后更新FilteredUsers,然后使用新元素淡入LLAdminBodyMain

您需要使用
foreach的
afterAdd
beforeRemove
回调。 看到和

延迟FilteredUsers计算函数的执行,使其不会在每次按下Name或Lastname字段中的键时触发。i、 e:等待2秒钟,直到没有按键事件;或者在kepress后等待1或2秒以执行计算的函数

看。另外,最好让一台计算机可以观察到,只返回计算值,而不是设置一个单独的可观察值

self.FilteredUsers = ko.computed(function () {
    var result = self.users().filter(function (user) {
        return (user.name.toUpperCase().includes(self.FilterByName().toUpperCase()) &&
            user.lastName.toUpperCase().includes(self.FilterByLastName().toUpperCase())
        );
    });
    return result;
}).extend({ rateLimit: {timeout: 2000, method: "notifyWhenChangesStop"} });
触发FilteredUsers时,首先淡入LLAdminBodyMain,然后更新FilteredUsers,然后使用新元素淡入LLAdminBodyMain

您需要使用
foreach的
afterAdd
beforeRemove
回调。 看到和

self.FilteredUsers = ko.computed(function () {
    var result = self.users().filter(function (user) {
        return (user.name.toUpperCase().includes(self.FilterByName().toUpperCase()) &&
            user.lastName.toUpperCase().includes(self.FilterByLastName().toUpperCase())
        );
    });
    return result;
}).extend({ rateLimit: {timeout: 2000, method: "notifyWhenChangesStop"} });