Frameworkless View
A simple view-presenter module for frameworkless.
View Demo
Features
- Built-in declarative event delegation
- Uses Handlebars to render HTML view templates
Installation
Use a Package Manager
bower:
bower install frameworkless-view
cp bower_components/frameworkless-view/dist/view.js src/lib
npm:
npm install frameworkless-view
cp node_modules/frameworkless-view/dist/view.js src/lib
Use the Source
Get started right away, so you can disassemble and play around at your lesure.
git clone git@github.com:synacorinc/frameworkless-view.git
npm install
npm run-script build
PORT=8080 npm start
Basic Usage
require(['view'], function(view) {
var template = '<h1>{{{title}}}</h1> <button id="hi">Click Me</button>';
var page = view( template );
page.hookEvents({
'click button#hi' : function() {
alert( 'Title: ' + page.$$('h1').textContent );
}
});
page.insertInto( document.body );
});
Concise Example
var view = require('view');
var list = view({
template : '<ul> {{#items}}<li>{{.}}</li>{{/items}} </ul>',
events : {
'click li' : 'clickItem'
},
clickItem : function(e) {
console.log(e.delegationTarget.getAttribute('title'));
}
};
list.insertInto(document.body);
list.render({
items : [ 'Peach', 'Mango', 'Orange' ]
});
Integrated Example
define([
'view',
'text!templates/index.html'
], function(view, template) {
var page = {
events : {
'click #submit' : 'submit',
'mouseover .tip' : 'showTip'
},
submit : function() {
this.view.$$('form').subimt();
},
showTip : function(e) {
var tip = this.view.$$('#tip');
tip.textContent = e.delegationTarget.getAttribute('title');
tip.style.display = '';
},
load : function(params, router) {
if (!this.view) {
this.view = view(template);
this.view.hookEvents(this.events, this);
}
this.view.template({
title : 'Test Title',
params : params
});
this.view.insertInto(document.body);
},
unload : function() {
this.view.remove();
}
};
return page;
});
Quick Repo Tour
/src
is where the source code lives/dist
is the built library/demo
is a simple demo, using requirejs
License
BSD