Skip to content

Instantly share code, notes, and snippets.

@latentflip
Created April 15, 2014 15:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save latentflip/10743032 to your computer and use it in GitHub Desktop.
Save latentflip/10743032 to your computer and use it in GitHub Desktop.
Possible ampersand-state presenter
var State = require('ampersand-state');
var _ = require('underscore');
function setupPresenterBindings (presenter) {
Object.keys(presenter._deps).forEach(function (dep) {
var parts = dep.split('.');
if (parts.length !== 2) return;
var presentee = parts[0];
var property = parts[1];
if (!presenter._definition[presentee] || presenter._definition[presentee].type !== 'object') return;
presenter[presentee].on('change:' + property, function (model, value) {
_.each(presenter._deps[dep], function (key) {
var derived = presenter._derived[key];
if (derived && derived.cache) {
var oldValue = presenter._cache[key];
var newValue = presenter._getDerivedProperty(key, true);
if (!_.isEqual(oldValue, newValue)) {
presenter._previousAttributes[key] = oldValue;
presenter.trigger('change:' + key, presenter, newValue);
}
}
});
});
});
}
function Presenter (attrs, options) {
this.presents = attrs.presents;
delete attrs.presents;
State.call(this, attrs, options);
setupPresenterBindings(this);
}
_.extend(Presenter.prototype, State.prototype);
Presenter.extend = State.extend;
module.exports = Presenter;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment