Sorting 同时排序和订阅淘汰可观测数组

Sorting 同时排序和订阅淘汰可观测数组,sorting,knockout.js,subscribe,Sorting,Knockout.js,Subscribe,我正在尝试对一个可观察数组进行排序和订阅。我不能让两个人同时工作。我认为它必须与数组的类型有关。我有两个数组名为“AttendanceArray”,其中一个被注释掉了。活动阵列允许单击使用订阅方法跟踪记录的复选框。使用此数组时,列链接不起作用。如果反转注释的数组,则排序将起作用。我试图让这两个功能同时工作 AttendanceArray: ko.observableArray([ new rosterItem(101, "J", "Smith", "RN Staff Nurse", fa

我正在尝试对一个可观察数组进行排序和订阅。我不能让两个人同时工作。我认为它必须与数组的类型有关。我有两个数组名为“AttendanceArray”,其中一个被注释掉了。活动阵列允许单击使用订阅方法跟踪记录的复选框。使用此数组时,列链接不起作用。如果反转注释的数组,则排序将起作用。我试图让这两个功能同时工作

AttendanceArray: ko.observableArray([
    new rosterItem(101, "J", "Smith", "RN Staff Nurse", false),
    new rosterItem(102, "T", "Davis", "LPN Staff Nurse", true),
    new rosterItem(103, "M", "Glass", "Resident Assistance", false),
    new rosterItem(104, "D", "Black", "Practioner", true)
    ]),

/*
    AttendanceArray: ko.observableArray([
    {ID: 101, FirstName: "J", LastName: "Smith", Title: "RN Staff Nurse", Present: false},
    {ID: 102, FirstName: "T", LastName: "Davis", Title: "LPN Staff Nurse", Present: true},
    {ID: 103, FirstName: "M", LastName: "Glass", Title: "Resident Assistance", Present: false},
    {ID: 104, FirstName: "D", LastName: "Black", Title: "Practioner", Present: true}
    ]),
    */

在使用
rosterItem
实例的实现中,排序在可观察和不可观察的比较中存在一些问题

在下面的(可运行)示例中,主要更改包括

  • 将视图模型
    FirstName
    LastName
    Title
    更改为不可见
  • 使用括号比较
    Present
    ,因为它是可观察的

    if (a.Present() === b.Present())
    
var rosterItem=函数(id、firstName、lastName、title、present){
this.ID=ko.可观察(ID);
this.FirstName=FirstName;
this.LastName=LastName;
这个.Title=Title;
这个。现在=可观察的(现在);
this.PresentOriginal=ko.utils.unwrapobbservable(this.PresentOriginal);
//选中更改时订阅,并推送或删除项目
this.Present.subscribe(函数(){
if(this.Present()!=this.PresentOriginal){
viewModel.changedAttendance.push(此);
}
否则{
viewModel.changedAttendance.remove(此);
}
}.约束(这个);
};
var viewModel={
出席人数:高([
新名册(101,“J”、“Smith”、“RN职员护士”,假),
新名册(102,“T”,“Davis”,“LPN职员护士”,真实),
新名册(103,“M”,“玻璃”,“驻地援助”,假),
新名册(104,“D”,“黑色”,“实践者”,真实)
]),
变更趋势:高可观察性([]),
通过以下方式选择:可观察(“当前”),
}
viewModel.setSortOrder=功能(项目){
开关(项目){
案例“FirstName”:
此项。按('FirstName')顺序选择;
打破
案例“LastName”:
此。按('LastName')选择排序;
打破
“标题”一案:
此项。按(“标题”)选择排序;
打破
“目前”一案:
此项。按(“当前”)顺序选择;
打破
}
}.bind(视图模型);
viewModel.sortByTitle=函数(a,b){//按列表顺序列排序
如果(a.Title==b.Title){
返回0;
}否则{
返回(a.标题b.Present())?-1:1;
}
}.bind(视图模型);
viewModel.sortByFirstName=函数(a,b){//按列表顺序列排序
如果(a.FirstName==b.FirstName){
返回0;
}
否则{
返回值(a.FirstName
#列表#{
宽度:500px;
}
ul.multiple_columns li{
文本对齐:左对齐;
浮动:左;
列表样式:无;
高度:30px;
宽度:100px;
}

已更改要发送到服务器的列表:(计数:)

  • 谢谢您,pfx!这让我快发疯了。