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"} });