Learn about our RFC process, Open RFC meetings & more.Join in the discussion! »

ko-modelize

3.5.0 • Public • Published

Travis Build
Bower Release Bower License

Modelize

Modelize is a small model/data interface for REST APIs using KnockoutJS. It also integrates encryption functionality in combination with SJCL.

Basic Usage

Page setup first, include all required scripts:

<!-- jQuery -->
<script src="/vendor/jquery/dist/jquery.min.js"></script>
<!-- jQuery rest -->
<script src="/vendor/jquery.rest/dist/1/jquery.rest.min.js"></script>
<!-- Knockout -->
<script src="/vendor/knockoutjs/dist/knockout.js"></script>
<!-- SJCL (optional) -->
<script src="/vendor/sjcl/sjcl.js"></script>
<!-- Modelize -->
<script src="/vendor/modelize/dist/modelize.min.js"></script>

Setup a connector:

api_connector = new RESTConnector('/api/')

Then define some models in coffeescript:

# Post model with a simple 1:n relation for comments and two editable data fields 
Post = Modelize
  api: 'posts'
  connector: api_connector
  has_many:
    comment:
      model: 'Comment'
  editable: [
    'title',
    'content' ]
 
# The corresponding comment model 
Comment = Modelize
  api: 'posts'
  connector: api_connector
  belongs_to:
    post:
      model: 'Post'
  editable: [
    'content']

But basically the model can be as short as just this:

Model = Modelize
  api: 'stuff'
  connector: api_connector

Using your models:

# Get all (published e.g.) posts and put them in the observable array @posts 
Post.get { status: 'published' }@posts
# You can also define custom methods for retrieval 
Post.get { id: 1 }(post) =>
  console.log post

Docs

Relations

has_one and belongs_to relations

has_one relations add a relation_id field to the main model.

relation()
relation_get([parameters][callbackOrObservable])

has_many relations

relations()
# For Example: 
Post.comments()

has_many relation access is always extended with an 's'. So relation 'comment', turns to 'comments'

relation_get([parameters][callbackOrObservable])
# For Example: 
Post.comment_get()
# Or 
Post.comment_get({ status: 'not_spam' })
relation_add([parameters][callbackOrObservable])
relation_destroy([callback])

Observable types

editable
functions
observable
computed
purecomputed

Predefined functions

create(callback)
update(paramscallback)
export([id])

Containers

Containers are defined just like the main models, with the exception that they only support the observable types and don't have any api/connector or relational options.

Definition

MetaInformation = Container
  editable: [
    'title',
    'description'
  ]

Usage and options

Post = Modelize
  container:
    MetaInformation:
      first_class: true
datahandler: [objectdefault: instance of JSONHandler]
first_class: [booldefault: false]

If this is set to true, then all editables are mapped to the main model object and available for direct editing.

container: [stringdefault: container option name]
field: [stringdefault: container option name]

Install

npm i ko-modelize

DownloadsWeekly Downloads

1

Version

3.5.0

License

MIT

Last publish

Collaborators

  • avatar