Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

bones-document

Package Overview
Dependencies
Maintainers
7
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bones-document

  • 2.0.0
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
1
decreased by-66.67%
Maintainers
7
Weekly downloads
 
Created
Source

Bones Document

This project provides model validation, editing and rendering helpers. To utilize these helpers defines models that extend the Document model and describe their schema using JSON-Schema.

Getting Started

When defining new models that extend the Document model and add a schema attribute. For example;

model = models['Document'].extend({
    schema: {
        'id': 'Document',
        'type': 'object',
        'properties': {
            'title': {
                'type': 'string',
                'title': 'Title'
            },
            'content': {
                'type': 'string',
                'title': 'Content',
                'format': 'markdown'
            }
        }
    }
});

The schema element must be a valid JSON schema. The quick start version of "Using JSON schema in Bones Document" is this;

  • Each attributes key should correspond to a property defined in the model's schema.
  • The type attribute should be populated, and describes the type (e.g. 'string', 'object').
  • The format attribute describes how display should work. this element is not required and by default everything is passed through the model's escape method. 'markdown' and 'raw' formats are also provided by Bones Document.

Tests

To complete tests successfully, you must install backbone-stash in bones-document's node_modules/ directory. Then run with

npm test

Validation

Models which extend Document will have a validate method which can be used (before saving a document to a database, for example) to validate a model's attributes.

Editing

TODO

Rendering

Models which extend Document will have a renderer method which returns an object intended to be used from within a template. This Renderer has a render method which takes the name of an attribute as an argument and returns the formatted version of that attribute.

A view for displaying a Bones Document may look like:

view = Backbone.View.extend({
    render: function() {
        $(this.el).html(this.template('post', this.model.renderer()));
        return this;
    }
});

...and the post template could contain;

<div class="post">
  <h2><%= render('title') %></h2>
  <%= render('content') %>
</div>

Of course the default formatters aren't going to be enough. It's possible to provide new ones, and select which formatter is used within a view. To define additional formatters you'll need to add them to the model's prototype. So in /models/post.bones you may have:

model.prototype.renderers = _.extend({
    blinky: function(value) {
        return '<blink>' + value '</blink>';
    }
}, model.prototype.renderers);

To set a custom formatter to be the default display for a field you just need so set it as the format of an attribute in the schema.

  ...
        'title': {
            'type': 'string',
            'title': 'Title',
            'format' 'blinky'
        },
  ...

Alternatively, you may pass a set of attribute to formatter mappings in as options when you instantiate a renderer. For, example to specify the blinky formatter from within a view you could do;

$(this.el).html(this.template(model.renderer({formatters: {title: 'blinky'}})));

FAQs

Package last updated on 13 Sep 2011

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc