Skip to content
A base model for Knockout.js entities
JavaScript
Find file
Latest commit c07c8e2 Aug 23, 2012 thelinuxlich Ajax fixes

README.md

Knockout.model plugin

Copyright 2011, Alisson Cavalcante Agiani

Licensed under the MIT license.

http://github.com/thelinuxlich/knockout.model/MIT-LICENSE.txt

Date: Fri Mar 04 14:00:29 2011 -0300

Files:

  • knockout.model.js

Dependencies:

Howto

  • ATTENTION! This version is not retrocompatible! Changes were made to ensure a better experience without Coffeescript!
  • Override the __urls attribute to set your RESTful routes
  • The values you set on the attributes will be default when you call obj.clear()
  • Override the __transientParameters attribute to set values that will not save(convert to json or to js)
  • You can pass {__cache: true} to index(),show() or doGet() alongside other request parameters to search local cache before triggering an AJAX request
  • Override the __afterHooks attribute with a object containing callbacks to run after a route is invoked

Model Methods

  • obj.get(attr) - Gets the attribute value(whether observable or not)
  • obj.set(object_with_values) - Sets attribute(s) value(s)(whether observable or not)
  • obj.refresh(callback) - Loads model data from show url and sets itself with it
  • obj.clear() - Clears all attributes(whether observable or not) and sets default values after
  • obj.toJSON(obj) - Converts whole model to JSON format, optional parameter containing an object with attributes to be serialized(Example: {id: true,name:false})
  • obj.toJS(obj) - Converts whole model to JS object representation, optional parameter containing an object with attributes to be serialized(Example: {id: true,name:false})
  • obj.isNew() - True if model.id is empty, false if isn't
  • obj.validate() - Implement your own function returning true or false
  • obj.save(params,callback) - Creates or updates a model instance, calling validate() before
  • obj.create(params,callback) - Creates a model instance on the server, using the "create" key from the url object
  • obj.update(params,callback) - Updates an existing model instance on the server, using the "update" key from the url object
  • obj.destroy(params,callback) - Deletes an existing model instance on the server, using the "destroy" key from the url object
  • obj.show(params,callback) - Fetches a model data(usually based on id) from the server, using the "show" key from the url object
  • obj.index(params,callback) - Fetches all model data from the server, using the "index" key from the url object
  • obj.addRoute(id,href,static = true) - Adds/modifies a route on __urls object. Third parameter also adds the route to static routes.
  • obj.doGet(route_id_or_url,params,callback,type="json") - Creates a new AJAX GET request with the same pattern of the standard routes.
  • obj.doPost(route_id_or_url,params,callback,type="json") - Creates a new AJAX POST request with the same pattern of the standard routes.
  • obj.start_transaction() - Disconnects the model of subscribers temporarily
  • obj.commit() - Reconnects the model with its subscribers and notifies them
  • obj.backup() - Stores all model values in a temporary internal objects
  • obj.restore() - Restores all model values saved with obj.backup()

Example(see docs for more details):

var Employee = Ctor(KoModel, function(super) { // inheriting KoModel to boost your own models!
    this.__urls = {
        "index": "http://#{window.location.host}/employees",
        "show": "http://#{window.location.host}/employees/:id",
        "create": "http://#{window.location.host}/employees/post",
        "update": "http://#{window.location.host}/employees/put",
        "destroy": "http://#{window.location.host}/employees/delete"
    }

    // We won't send status_text attribute to the server
    this.__transientParameters = ["status_text"];

    // An example of callback for automatically setting the model id after create
    this.__afterHooks: {
        "create": function(response) {  this.id(response.id) }
    }

    this.id = ko.observable("");
    this.name = ko.observable("John Doe");
    this.surname = ko.observable("");
    this.fullname = ko.computed(function() {
        return this.name() + " " + this.surname();
    }, this);
    this.birth_date = ko.observable("");
    this.address = ko.observable("");
    this.phone = ko.observable("");
    this.status = ko.observable("E");
    this.status_text = ko.computed(function() {
         if(this.status() === "E") {
            return "enabled"; 
         } else {   
            return "disabled";
         }
    }, this);
    super.init.call(this); // if you want the this.__defaults applied to your model instance, call super.init.call(this)

    this.validate = function() {
        return(this.name() !== "" && this.surname() !== "" && this.birth_date() !== "");
    }
});
Something went wrong with that request. Please try again.