https://github.com/loadingio/ldc
https://github.com/loadingio/ldc
Last synced: 23 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/loadingio/ldc
- Owner: loadingio
- Created: 2020-01-26T08:12:24.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-06-09T17:36:26.000Z (over 2 years ago)
- Last Synced: 2025-10-11T01:51:38.346Z (4 months ago)
- Language: JavaScript
- Size: 481 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# ldc
loading js component/action framework.
## API
- `ldc.register(name, dep-list, (({dep-list}) ->))`: register a component
- while name ignored the module will be an anonymous module and be treated as an app directly.
- return the registered ldc object.
- `ldc.app(name, ...)`: set main entry point of component
- `ldc.init(opt, ...)`: force init components
- `opt` is either:
- a string: name for specific ldc component.
- an object: a ldc object ( returned by `ldc.register` )
- an array of either string or objects as above
- `ldc.on(name, ((...opts)->)`: listen to a ldc event
- `ldc.fire(name, ...opts)`: fire a ldc event
- `ldc.action(opt1, opt2)`: register an action handler.
there are three different cases of usage
1. opt1 = name, opt2 = object
register an set of action handler under the namespace with opt1 as its name.
2. opt1 = object, opt2 is omitted
similar to 1. while use module name as the action name.
3. opt1 = name, opt2 = function (deprecated)
register ldc action. deprecated since we can use on/fire to replace this.
## Module
ldc helps us to maintain the dependency of modules. Define a module as follow:
ldc.regsiter "module1", <[]>, -> return {foo: -> \bar}
A newly created this context can be used in this module:
ldc.regsiter "module1", <[]>, -> return @ <<< {foo: -> \bar}
Declare dependency and load another module:
ldc.regsiter "module2", <[module1]>, ({module1}) ->
the `module1` object sent to module2 handler will be the returned value in the module1 handler:
ldc.regsiter "module2", <[module1]>, ({module1}) ->
assert module1.foo! == \bar
Each module function will be called at most once. The returned object in the first call will be used then.
ldc.regsiter "module1", <[]>, ->
console.log "this line runs only once."
@foo = (@foo or 0) + 1
return @
ldc.regsiter "module2", <[module1]>, ({module1}) ->
assert module.foo == 1
ldc.regsiter "module3", <[module1]>, ({module1}) ->
assert module.foo == 1
main entry module can be defined by `ldc.app` or by omitting the module name:
ldc.regsiter <[module1 module2]>, ({module1, module2}) -> ...
## Action
One can use `lda` to access the actions registered via `ldc.action`. For example, following code registers a set of actions:
ldc.register "mymodule", [], ->
ldc.action do
open: ->
close: ->
Once registered, we can use `ldc.mymodule` to access them:
ldc.mymodule.open!
## License
MIT