我正在编写一些代码来对表中的列进行排序。(该表通过 KnockOutJS 绑定到数据)。为了帮助跨不同的表和页面自动执行此过程,我创建了一个具有列名的对象,以及该列绑定到的对象的 sortPropertyName。
self.headers = [
{ title: 'ID', sortPropertyName: 'organizationId' },
{ title: 'Name', sortPropertyName: 'name' },
{ title: 'City', sortPropertyName: '[address].city' },
{ title: 'State', sortPropertyName: '[address].state' },
{ title: 'Phone Number', sortPropertyName: 'phone' }
];
该排序属性被传递给排序例程,然后它应该根据 sortProperty 对数据进行排序:
self.sort = function (header, event) {
var prop = header.sortPropertyName;
self.people.sort(function (a, b) {
return a[prop] < b[prop] ? -1 : a[prop] > b[prop] ? 1 : a[prop] == b[prop] ? 0 : 0;
});
};
(全部归功于 Ryan Rahlf http://ryanrahlf.com/sorting-tables-by-column-header-with-knockout-js-part-2/)
这适用于“根”属性的属性,例如名称和 ID,但是该对象有另一个名为“地址”的对象,其中包含城市和州等信息。这破坏了 sort() 函数,因为我没有正确指定如何获取“城市”和“州”参数。
例如,为了访问“名称”,我们可以使用person.name或person['name']。然而,在地址的情况下,事情变得有点复杂。我们可以使用person.address.city或person['address'].city甚至person['address']['city']。
然而,就我传递给sort()函数的sortPropertyName而言,似乎没有任何格式组合对我有用。“名称”可以正常工作,但“城市”和“州”不能。
如何修改我的代码以使一切按预期工作?