@archjs/databinder

0.0.1-beta0.0.1 • Public • Published

DataBinder

Info

language        : TypeScript

module type  : 'commonJs'

dependencies: "@archjs/event-notifier"

description     :

A simple Typescript data-bind library that permits external predicates to intercept changes in object properties. This library uses dirty pattern and gives the user the ability to trigger changes by calling the member method 'update'.

Test coverage

Installation

npm install @archjs/databinder

package.json

{ ...
   dependencies: {
     ...
     "@archjs/databinder": "^"
     ...
}

This plugin has an install script, so when you load this module via npm it will automatically erase it's unecesary files. It uses "fs-extra" , "rimraf", "rmdir" @install.

For dev enviorment use git clone git@gitlab.com:softem/archjs/core/databinder.git

Usage

creation

Using new DataBinder

 import { DataBinder } from "@archjs/databinder/databinder";
 ...
 /* no input data */
 var model0 = new DataBinder();
 /* basic data type as input */
 var model1 = new DataBinder( 24 );
 /* array as input */
 var model2 = new DataBinder( [24] );
 /* json object as input */
 var model3 = new DataBinder( {age:24} );

DataBinder data from nested data

When we have a nested json data object and we want each child node of the tree structure to be bindable we need to use the static method DataBinder.createRecursiveBinder( data )

 import { DataBinder } from "@archjs/databinder/databinder";
 var data  = { 
              user:{ 
                      id:24
                    , email:"test@test.com" 
              }
              , userInfo:{ 
                      age:24
                    , firstName: "John"
                    , lastName:  "Doe"
              } 
 };
 var model = DataBinder.createRecursiveBinder( data );

Bind handler to property change

   dataBinder.bind( <key:string> , <handler:Function> );

bind -> method

key -> string

handler->

function( data ){ ... } 

data ->

{ oldValue:any, newValue:any } 

example

var position:DataBinder = new DataBinder( {x:10,y:20} );
position.bind('x',function(data){ 
      var dx = (data.oldValue-data.newValue);
      console.log('moved element with dx = '+dx+'px' ); 
});
position['x'] = 21;   // dirty flag activated for 'x' key.
                   // observers are not notified!

position['x'] = 31    // dirty flag activated for 'x' key

position.update(); // observers are notified

output: moved element with dx = 21px

Readme

Keywords

none

Package Sidebar

Install

npm i @archjs/databinder

Weekly Downloads

0

Version

0.0.1-beta0.0.1

License

ISC

Last publish

Collaborators

  • roadrunner2n
  • ionalex
  • gtkano