Code Monkey home page Code Monkey logo

backbone-nested-types's Introduction

backbone-nested-types

Backbone Model mixin that provides toJSON(), parse(), and validate() implementations for models with nested types.

Build Status

Setup:

  1. Mix this object into a Backbone Model using Backbone.Model.extend(NestedTypesMixin).

  2. Define nested-type attributes in one of the following ways:

    A. Set nestedTypes in the Model definition.
    B. Set nestedTypes on the model instance.

    Note: nestedTypes can either be an object or a function.

Sample Setup and Usage:

var MyModel = Backbone.Model.extend({
    nestedTypes: {
        subModel: Backbone.Model
    }
}).extend(NestedTypesMixin);

// `subModel` is converted to an instance of `Backbone.Model` because `{ parse: true }` is passed.
var model = new MyModel({ subModel: { foo: 'bar' } }, { parse: true });

model.get('subModel');// => returns the Backbone Model

// `subModel` is converted to a plain object using it's own `toJSON()` method
model.toJSON();// => { subModel: { foo: 'bar' } }

backbone-nested-types's People

Contributors

cormant-inc avatar russplaysguitar avatar

Stargazers

João Mário Malosso Zitelli avatar  avatar Fabien Franzen avatar  avatar  avatar

Watchers

James Cloos avatar  avatar João Mário Malosso Zitelli avatar  avatar

Forkers

russplaysguitar

backbone-nested-types's Issues

Event propagation

Currently, the mixin does not propagate Backbone events of nested types up to the parent model. It makes sense for the mixin to do that.

One specific situation that would be good to propagate events in is when nested models trigger "invalid" due to the server returning invalid nested data from a parent.save(). Although this is an unusual case, it can occur and is confusing to debug. Currently, if you have an "invalid" listener on the parent, it would not be triggered because the child's "invalid" event would not propagate.

Anonymous nesting is not supported

If you try to use an additional model mixin with this mixin which also overrides toJSON and calls this.constructor.__super__.toJSON.apply(this, arguments);, an infinite loop occurs due to the nested type mixin calling toJSON with the child context.

A rough way to fix this in the nested types mixin would be something like:

toJSON: function (options) {
            var superJSON = this.constructor.__super__.toJSON;
            var originalConstructor = this.constructor;
            this.constructor = this.constructor.__super__.constructor;
            var json = superJSON.apply(this, arguments);
            this.constructor = originalConstructor;

           ...

Support clone()

Nested types should be properly cloned by calling clone() on them recursively. Types that do not have clone() could just have a new instance created.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.