0.2.0 • Published 6 years ago

kjantzer-backbone-template-data v0.2.0

Weekly downloads
1
License
MIT
Repository
github
Last release
6 years ago

Backbone.js Template Data

Version 0.2.0

Provides alternative to .toJSON() with ability to extend data for templating

Background

Backbone models have a toJSON method that prepares the attributes as a JSON object. It is used when sending the model to the server. toTemplate has been introduced to provide a way of extending the data in toJSON for the purpose of rendering in an HTML template but without modifying what is sent to the server.

Template data takes toJSON and extends it with the data defined.

Setup

To use, you define a hash of extra data. Hash values can be strings of method names or a function.

let Model = Backbone.Model.extend({

	template: {
		'full_name': 'fullName',
		'extra_data': function(){ return 'Extra data' }
	},
	
	fullName(){ return this.get('first')+' '+this.get('last') }

});

Now for using the data

let model = new Model({first: 'John', last: 'Doe'})

console.log(model.toJSON()) // {label: 'My Model'}
console.log(model.toTemplate()) // {first: "John", last: "Doe", full_name: "John Doe", extra_data: "Extra data"}

Applying the data to a template string

let tmpl = '<h1>{{full_name}}</h4>'

// use underscores template engine (or another)
_.template(tmpl, model.toTemplate())

// or you can pass directly to the method (which will use underscores _.template)
model.toTemplate(tmpl) // <h1>John Doe</h4>

Library Support

Child Collections

When using a child model, you can add template: true to include the data of the child model in your template data.

var Computer = Backbone.Model.extend({
	models: {
		'employee': {
			id: 'employee_id',
			coll: myCompany.get('employees'),
			template: true
		}
	}
});

Attribute types

Any specified attribute types will be observed

Changelog

v0.2.0 - 9/14/18

  • .toTemplate(templateStr) now accepts an optional template string that will automatically merge the template data into your template

License

MIT © Kevin Jantzer - Blackstone Publishing

0.2.0

6 years ago

0.1.0

6 years ago