0

请找到jsfiddle 示例。我有一组可观察的人员,每个人都有 id、firstName 和 lastName。用户按任何属性在两个方向上对该数组进行排序。
然后,在某个时候,我需要更新我的数组,我使用了 knockout.mapping.fromJS 函数:

this.rockStarsMapping = {
    create: function (options) {
        // just to make sure that key works
        console.log('created');
        return options.data;
    },
    key: function(data) {
        return data.id;
    }
};
this.rockStars = ko.observableArray([]);
this.getRockStars = function() {
    // here should be some ajax call instead of a stub
    var newRockStars = [
        { id: 1, firstName: "John", lastName: "Lehnon" },
        { id: 2, firstName: "Paul", lastName: "McCartney" },
        ...
    ];
    ko.mapping.fromJS(newRockStars, self.rockStarsMapping, self.rockStars);
};

问题是,新数组按 id 排序(例如),这种排序优于现有数组中的排序。
我目前的解决方案是记住当前的排序列名称和排序方向,但它不能正常工作,因为其他列可能有其他排序方向。例如,在我的 jsfiddle 代码中,尝试先按 Id 降序排序(6、5、4、...),然后按名字排序。现在,如果您单击“获取摇滚明星”,则 Id 列中的排序顺序会发生变化,这不是您想要的行为。
如何保持排序顺序不变?更重要的是——如何确保新项目位于数组的正确位置?

4

0 回答 0