Skip to content

KnockRoute provides a URL router based template binding for building SPAs with Knockout

License

Notifications You must be signed in to change notification settings

jusbuc2k/knockroute

Repository files navigation

KnockRoute

This is a work in progress

Simple view model and template router for Knockout.

  • Designed to use in the browser.
  • Designed to build small or medium sized Single Page Applications.
  • Provides routing of a URI to a model and template (HTML) using onhashchange or popstate.
  • Provides parsing of route segments into "route values"
  • Supports data type parsing into int, float, hex
  • Supports segment constraints
  • Supports segment data type parsing (int, float, hex)
  • ASP.NET inspired route template syntax
  • Area support for grouping views into functional areas (e.g. /person/list/, /person/view/, /widget/list/, etc.)

Getting Started

First, you need a working understanding of Knockout, observables, bindings, etc.

Installation and Basic Use

NPM

npm install knockroute

bower

bower install knockroute

Usage in Browser

Add a script reference to knockroute.js, then use the routeTemplate binding. Alternatively, you can use an AMD module loader to load the script, in which case knockroute does not attach itself to the ko object.

<div data-bind="routeTemplate: router"></div>

<!-- jQuery only required for the default ajax template provider (uses $.ajax) -->
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>

<script src="//ajax.aspnetcdn.com/ajax/knockout/knockout-3.0.0.js"></script>
<script src="knockroute.js"></script>

<script>    

    // Define view models here.

    var hostModel = {
        router: new ko.route.ViewRouter({
            views: [
                { name: 'home', model: HomeModel, templateID: 'homeTemplate' },
                { name: 'about', model: ListModel, templateID: 'listTemplate' },
                { name: 'contact', model: DetailModel, templateID: 'detailTemplate' }
            ],
            routes: [
                {
                    template: '{view}/{action?}/{id:int?}',
                    defaults: { view: 'home', action: 'index' },
                }
            ],
            templateProvider: 'ajax'
        })
    };

    ko.applyBindings(hostModel);
</script>

<script id="homeTemplate" type="text/html">
    <h1>Hello World</h1>
    <a href="#/list">List View</a>
</script>
<script id="listTemplate" type="text/html" data-src="ListTemplate.html"></script>
<script id="detailTemplate" type="text/html" data-src="DetailTemplate.html"></script>

About

KnockRoute provides a URL router based template binding for building SPAs with Knockout

Resources

License

Stars

Watchers

Forks

Packages

No packages published