relu-core
Version:
38 lines (33 loc) • 1.02 kB
JavaScript
var base = require("./base");
module.exports = function rpHandled(origin, changedHandler, addedHandler, removedHandler) {
var p = base();
p.constructor = rpHandled;
if(!addedHandler && !removedHandler) {
var orgChangedHandler = changedHandler;
changedHandler = function() {
orgChangedHandler(p());
};
origin.onChanged(changedHandler);
} else {
addedHandler = addedHandler || function(){};
removedHandler = removedHandler || function(){};
origin.onUpdated(changedHandler);
origin.onAdded(addedHandler);
origin.onRemoved(removedHandler);
}
origin.ref(p);
p.onceDisposed(function() {
if(!addedHandler && !removedHandler) {
origin.removeChangedListener(changedHandler);
} else {
origin.removeUpdatedListener(changedHandler);
origin.removeAddedListener(addedHandler);
origin.removeRemovedListener(removedHandler);
}
origin.unref(p);
});
p._getUndependend = p._get = function() {
return origin._getUndependend();
};
return p;
};