Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/daquirm/nexus

An FRP cell application framework
https://github.com/daquirm/nexus

Last synced: about 7 hours ago
JSON representation

An FRP cell application framework

Awesome Lists containing this project

README

        

##nexus
[![Code Climate](https://codeclimate.com/github/DaQuirm/nexus.png)](https://codeclimate.com/github/DaQuirm/nexus)

An MVVM-based client application framework

### Installation

Bower
```
$ bower i nexus
```

Node.js
```
$ npm i nexus-node
```

### Example

```coffeescript
# Temperature is “measured” and displayed in two scales

# Raw business domain model
class TemperatureModel
constructor: ->
# nx.Cell is a “spreadsheet cell”
@celsius = new nx.Cell value:-20

# ViewModel describes data transformation for representation in views
class TemperatureViewModel extends TemperatureModel
constructor: ->
super
@fahrenheit = new nx.Cell
# Cell-oriented data flow
@fahrenheit['<-'] @celsius, (celsius) -> celsius * 1.8 + 32

# Views are plain functions nested arbitrarily and written pseudo-declaratively
AppView = (context) ->
nxt.Element 'main',
nxt.Element 'div',
# Pin-point rendering will only change this part when
# bound data is modified
nxt.Binding context.celsius, (celsius) ->
nxt.Text "#{celsius}℃"
nxt.Element 'div',
nxt.Binding context.fahrenheit, (fahrenheit) ->
nxt.Text "#{fahrenheit}°F"
nxt.Element 'button',
nxt.Text 'Measure!'
# fake measurement
nxt.Event 'click', context.celsius, -> Math.round(Math.random()*50 - 25)

window.addEventListener 'load', ->
window.model = new TemperatureViewModel
# Attach the view to the DOM (can be any existing node)
document.body.appendChild AppView(model).data.node
```