callstackjs
v1.0.1
Published
JavaScript call stack controller
Downloads
14
Readme
callStack
JavaScript call stack controller.
API
- callStack.add(ctx
:Object
, fn:String
, options:Object
) - callStack.wrap(fn
:Function
):Function
- callStack.wrap(ctx
:Object
, fn:String
):Function
- callStack.wrap(ctx
:Object
, fn:Function
):Function
- callStack.wrap(ctx
:Object
, fn:String
, options:Object
):Function
- callStack(name
:String
):Stack
— get call stack by name - callStack.order(firstName
:String
, secondName:String
[, etc]) - callStack.pause()
- callStack.unpause()
- callStack.clear(name
:String
) - callStack.override(ctx
:Object
, method:String
, callback:Function
):Function
Use case
var MyView = framework.View.extend({
initialize: function (){
callStack('vis').wrap(this, 'visibility');
callStack('render').wrap(this, 'render', { uniq: 'once' });
},
visibility: function (state){
console.log(this.id+'.vis:', state);
this.$el.css('display', state ? '' : 'none');
},
render: function (){
console.log(this.id+'.render');
this.$el.empty().html( ... );
}
})
callStack.order('render', 'vis');
var viewHeader = new MyView({ id: 'header' });
var viewContent = new MyView({ id: 'content' });
var viewFooter = new MyView({ id: 'footer' });
// (1) Somewhere in the code.
viewHeader.visibility(true);
viewContent.visibility(true);
viewFooter.visibility(true);
// (2)
viewFooter.render(); // (!)
viewHeader.render();
viewContent.render();
// (3)
viewFooter.visibility(false);
viewFooter.render(); // (!!)
Next tick: console
header.render
content.render
footer.render
header.vis: true
content.vis: true
footer.vis: true
footer.vis: false
callStack.override
var module = {
name: "callStack",
toString: function (){
return this.name;
}
};
module.toString(); // "callStack"
// Owerride `toString` method
callStack.override(module, 'toString', function (toStringFn/*Function*/){
return function (){
return '['+ toStringFn.call(this) +']';
};
});
module.toString(); // "[callStack]"
Options
Option:weight (default = 0)
var foo = callStack.wrap(function (){ console.log("foo:", arguments) }, { weight: 100 });
var bar = callStack.wrap(function (){ console.log("bar:", arguments) }, { weight: 10 });
bar(1);
foo(1);
bar(2);
foo(2);
Console:
foo: 1
foo: 2
bar: 1
bar: 2
Option:uniq
var foo = callStack.wrap(function (){ console.log("foo:", arguments) }, { uniq: true, weight: 100 });
var bar = callStack.wrap(function (){ console.log("bar:", arguments) }, { uniq: "once" });
foo(1);
bar(1);
foo(2);
foo(2);
bar(1)
bar(1);
foo(3);
foo(3);
foo(1);
bar(5);
Console:
foo: 1
foo: 2
foo: 3
foo: 1
bar: 5