tmeasday:deps-extensions

Extension to the deps package to simplify common tasks


Install
meteor add tmeasday:deps-extensions@=0.1.0

Documentation

Some reactive helpers for meteor

Install

Use meteorite: Then add via:

mrt add deps-extensions

Usage

Adding Reactive Variables

 Meteor.deps.add_reactive_variable(object, 'something', default_value)

Which adds three functions to object: object.something(), object.something.set() and object.something.equals() which behave reactively.

Using reactive contexts

repeat

Meteor.deps.repeat(fn)

Repeatedly call fn, once each time the dependencies that it uses changes. For example:

Meteor.deps.repeat(function() {
  console.log("current_post_id is: " Session.get('current_post_id'));
});

isolate

Meteor.deps.isolate(fn)

Kill all reactivity inside fn, so that the current context isn't ever invalidated by that code. Returns the result of fn. For example:

Meteor.deps.isolate(function() {
  return Comments.find({}, {order: {score: 1}});
});

Will return a list of comments that is 'unreactive' and thus won't reorder as the user reads them.

await

 Meteor.deps.await(predicate, cb)

Repeatedly (reactively) call predicate until it's true, then call cb once only. For example

Meteor.deps.await(function() { return Router.current_page() === 'home'; }, function() {
  alert('Welcome to my site! Nice to see you!');
});

memoize

 Meteor.deps.memoize(fn)

Returns a function that wraps fn in a context, so that fn's reactivity can be maintained, whilst minimizing the number of calls to it. Example:

var cheapReactiveFn = Meteor.deps.memoize(function() {
  return expensiveReactiveFn();
});

Now reactiveFn can be called many times, but expensiveReactiveFn will only get called once (per value it returns);