gpt4 book ai didi

javascript - 对数组进行排序而不重绘内容

转载 作者:行者123 更新时间:2023-11-28 01:53:37 26 4
gpt4 key购买 nike

我正在尝试按 online 属性对用户进行排序:

var userViewModel = function(data){
var self = this;
self.name = ko.observable(data.name);
self.online = ko.observable(data.online);
};

var mainViewModel = function(data){
var self = this;
self.users = ko.observableArray(data.users.map(function(user){
var model = new userViewModel(user);
model.online.subscribe(function(){
self.users.sort(function (a, b) { return b.online() - a.online(); });
});
return model;
}));

self.users.subscribe(function(){
console.log('users have changed');
});
};

HTML:

<div data-bind="foreach: users">
Online: <div data-bind="text: online"></div>
<div data-bind="text: name"></div>
</div>

一切工作正常,但在更改在线属性时,会对用户进行排序并记录“用户已更改”。我知道发生这种情况是因为我正在更改原始数组。我想要的是 - 不改变原始数组,只是显示它排序(如 Angular does it )

最佳答案

只需创建一个新的计算来填充用户的排序列表。

var mainViewModel = function(data){
var self = this;
self.users = ko.observableArray(data.users.map(function(user){
var model = new userViewModel(user);
return model;
}));
self.sortedUsers = ko.computed(function(){
var users = self.users();
users.sort(function (a, b) { return b.online() - a.online(); });
return users;
});
};

希望对您有所帮助。

关于javascript - 对数组进行排序而不重绘内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19421614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com