Skip to content

Instantly share code, notes, and snippets.

@lukejagodzinski
Created January 5, 2016 11:57
Show Gist options
  • Save lukejagodzinski/0dd2f6428cf9393d3f85 to your computer and use it in GitHub Desktop.
Save lukejagodzinski/0dd2f6428cf9393d3f85 to your computer and use it in GitHub Desktop.
Article: Sorting with Relations in Meteor
var defineRelation = function(
Collection, RelatedCollection, relationName, relatedFieldName
) {
Collection._computations = Collection._computations || {};
var comps = Collection._computations[relationName] = {};
var stop = function(doc) {
if (comps[doc._id]) {
comps[doc._id].stop();
}
};
var update = function(doc) {
var setModifier = {};
setModifier[relationName] = doc[relatedFieldName] ?
RelatedCollection.findOne(doc[relatedFieldName]) : undefined;
Collection._collection.update(doc._id, {
$set: setModifier
});
};
Collection.find().observe({
added: function(newDoc) {
stop(newDoc);
comps[newDoc._id] = Tracker.autorun(function() {
update(newDoc);
});
},
changed: function(newDoc, oldDoc) {
if (newDoc[relatedFieldName] !== oldDoc[relatedFieldName]) {
stop(oldDoc);
comps[newDoc._id] = Tracker.autorun(function() {
update(newDoc);
});
}
},
removed: function(oldDoc) {
stop(oldDoc);
}
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment