很抱歉,如果标题不具有描述性!我试图根据另一个可观察数组的顺序重新排序一个可观察数组。例如
self.tagging_fields = ko.observableArray(['field_1', 'field_2', 'field_3'])
function Tag(data){
var self = this;
self.field_name = ko.observable(data.field_name);
}
var example_tags = [
new Tag({field_name : "field_3"}),
new Tag({field_name : "field_2"}),
new Tag({field_name : "field_1"})
]
self.tags = ko.observableArray(example_tags);
//This is what I want to achieve
var after_sorting = [
{ field_name : "field_1" },
{ field_name : "field_2" },
{ field_name : "field_3" }
]
我尝试做的是根据self.tagging_fields中出现的顺序,按self.tags中的field_name对标记对象的顺序进行排序。任何人都可以帮我为这个操作编写自定义排序功能
更新
我已经设法在输出foreach中实现了我想要的东西
我通过在输出foreach
中进行比较来解决这个问题<div data-bind="foreach: { data: $root.tagging_fields, as : 'tagging_field' }">
<div data-bind="foreach: { data : line.tags, as : 'tag' }">
<div data-bind="if: tag.field_name() === tagging_field">
<span data-bind="text: tag.field_name"></span>
<input data-bind="value: tag.value"/><br/>
</div>
</div>
</div>`
我知道它可能不是最好的方式,但它有效!
答案 0 :(得分:0)
像(未经测试)的东西:
self.tags.sort(function(left, right) {
var leftIndex = self.tagging_fields.indexOf(left);
var rightIndex = self.tagging_fields.indexOf(right);
return leftIndex == rightIndex
? 0 : (leftIndex < rightIndex ? -1 : 1)
});
请参阅doc here。