Friday, 15 March 2013

javascript - Knockout.js - Sort observable array by property of another observable array -



javascript - Knockout.js - Sort observable array by property of another observable array -

sorry if title isn't descriptive! trying reorder observable array based on order of observable array. example

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 want accomplish var after_sorting = [ { field_name : "field_1" }, { field_name : "field_2" }, { field_name : "field_3" } ]

what i'm trying sort order of tag objects field_name within self.tags based on order appear within self.tagging_fields. help me out write custom sort function operation

update:

i have managed accomplish want within output foreach

i've worked around doing comparing within output foreach

<div data-bind="foreach: { data: $root.tagging_fields, : 'tagging_field' }"> <div data-bind="foreach: { info : line.tags, : '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>`

i know it's not best way works!

something (untested):

self.tags.sort(function(left, right) { var leftindex = self.tagging_fields.indexof(left); var rightindex = self.tagging_fields.indexof(right); homecoming leftindex == rightindex ? 0 : (leftindex < rightindex ? -1 : 1) });

see doc here.

javascript arrays sorting knockout.js

No comments:

Post a Comment