SlideShare a Scribd company logo
Mura ORM and EmberJS
• By Matt Levine

Who Am I?
Who Am I?
• CTO of Blue River Interactive Group
Who Am I?
• CTO of Blue River Interactive Group

• Started Mura CMS with Sean Schoeder a long time
ago...
What We’re Talking About
What We’re Talking About
• Mura ORM
What We’re Talking About
• Mura ORM

• EmberJS
What We’re Talking About
• Mura ORM

• EmberJS

• But Mostly Mura ORM
Why Mura ORM?
Why Mura ORM?
• It all started with creating the Mura approval chains.
Why Mura ORM?
• It all started with creating the new Mura approval
chains.

• Needed to create 5 new entities and didn’t want to
write a custom DAO for each one.
Started with 3 Options
Started with 3 Options
• Custom DAOs
Custom DAOs
• Too much work
Custom DAOs
• Too much work

• No code re-use
Started with 3 Options
• Custom DAOs

• Mura Class Extension Module
Mura Class Extension Module
GREAT FOR: 

• Targeting nodes for custom business logic
Mura Class Extension Module
GREAT FOR: 

• Targeting nodes for custom business logic

• Rendering events
Mura Class Extension Module
GREAT FOR: 

• Targeting nodes for custom business logic

• Rendering events

• Data events
Mura Class Extension Module
GREAT FOR: 

• Targeting nodes for custom business logic

• Rendering events

• Data events

• Adding custom values to be used within rendering and
data events
Mura Class Extension Module
NOT AS GOOD FOR: 

• Maintaining relationships between entities
Mura Class Extension Module
NOT AS GOOD FOR: 

• Maintaining relationships between entities

• Really custom business logic
Mura Class Extension Module
NOT AS GOOD FOR: 

• Maintaining relationships between entities

• Really custom business logic

• Directly querying the database
Mura Class Extension Module
RECAP:

• Only handles very simple entities
Mura Class Extension Module
RECAP:

• Only handles very simple entities

• Great for hooking attributes to existing Mura entities, but
bad for complicated logic.
Mura Class Extension Module
RECAP:

• Only handles very simple entities

• Great for hooking attributes to existing Mura entities, but
bad for complicated logic.

• Want the data to be stored in flat tables.
Mura Class Extension Module
RECAP:

• Only handles very simple entities

• Great for hooking attributes to existing Mura entities, but
bad for complicated logic.

• Want the data to be stored in flat tables.

• Not the appropriate choice
Started with 3 Options
• Custom DAOs

• Mura Class Extension Module

• CF based Hibernate ORM
CF Hibernate ORM
GREAT FOR:

•Easily defining entity properties
CF Hibernate ORM
GREAT FOR:

•Easily defining entity properties

•CRUD operations
CF Hibernate ORM
GREAT FOR:

•Easily defining entity properties

•CRUD operations

•Managing relationships to other CF ORM entities
CF Hibernate ORM
GREAT FOR:

•Easily defining entity properties

•CRUD operations

•Managing relationships to other CF ORM entities

•You just describe the entity with properties and start
using it!
CF Hibernate ORM
NOT SO GOOD FOR:

•Creating relationships to Mura core entites
CF Hibernate ORM
NOT SO GOOD FOR:

•Creating relationships to Mura core entites

•Working with DI1
CF Hibernate ORM
NOT SO GOOD FOR:

•Creating relationships to Mura core entites

•Working with DI1

•Don’t want to deal with sharing hibernate sessions with
other application and plugins
CF Hibernate ORM
NOT SO GOOD FOR:

•Creating relationships to Mura core entites

•Working with DI1

•Don’t want to deal with sharing hibernate sessions with
other application and plugins

•It just works, but when it doesn't... Good Luck
CF Hibernate ORM
RECAP:

•Love the concept!
CF Hibernate ORM
RECAP:

•Love the concept!

•Seems like CF ORM would be a walled garden.
CF Hibernate ORM
RECAP:

•Love the concept!

•Seems like CF ORM would be a walled garden.

•Sharing a ORM session with other sub applications
sounds like a nightmare
CF Hibernate ORM
RECAP:

•Love the concept!

•Seems like CF ORM would be a walled garden.

•Sharing a ORM session with other sub applications
sounds like a nightmare

•I would like the relationships to be based on DI1
BeanName or Alias rather than component path.
CF Hibernate ORM
RECAP:

•When things go wrong it really feels like a black box. You
get low level java error that don't neccesarilly easily map
to what you did wrong in your CFML

•CF ORM really seems to want you to forget about sql
and just go through it's black box. I like sql. I think is it's
pretty darn cool
What if?
What if?
• I roll my own that works exactly how Mura works!
I Could Make Them
Accesible via $.getBean(entityName); 
and
application.serviceFactory(entityName);

Takes advantage of DI1 dependency injection
Have the Same Interactions
• entity.loadBy()

• entity.get{relateEntity}Iterator();

• entity.get{relateEntity}Query();

• entity.get{relateEntity}();

• entity.getFeed();

• entity.validate();

• entity.getError();
Have the Same Interactions
• entityFeed.addParam();

• entityFeed.getQuery();

• entityFeed.getIterator();
Have the Same Interactions
feed=$.getBean(entityName).getFeed();

feed.addParam(column=’mycolumn’,criteria=‘test’);

iterator=feed.getIterator();

!
<cfloop condition=”iterator.hasNext()”>

<cfoutput>#iterator.next().getMyColumn()#</cfoutput>

</cfloop>
Be Targetable By Mura Events
component extends=”mura.cfobject”{

onBeforeMyEntitySave($){

var bean=$.event(‘bean’);

....

}

}
They Could Also
• Know how to bundle themselves

• Play well with Mura content versioning

• Have a more simple implementation than CF ORM
It could use the same
component attributes
• entityName

• table

• datasource

• discriminatorColumn

• discriminatorValue

• orderby

• readonly
With some new ones
• bundleable

• cacheName

• dbtype

• manageSchema

• useTrash
It could use the same property
attributes
• name

• persistent

• fieldtype

• cfc

• fkcolumn

• type

• cascade

• singularName

• orderby

• length
• default

• ormType

!
!
With some new ones
• dataType

• nullable

• required

• validate

• message

• regex

• comparable
And a bunch attributes for
validation
• minValue

• maxValue

• minLength

• maxLength

• minCollection

• maxCollection

• minList

• maxList

• inList

• method

• lte

• lt

• gte

• gt

• eq

• neq
It could also support CF ORM
• preLoad();

• postLoad();

• preUpdate();

• postUpdate();

• preCreate();
• postCreate();

• postInsert();

• preDelete();

• postDelete();
So that’s what we did
So that’s what we did
• Now let’s actually see some code
EmberJS
EmberJS
• A Framework for Creating 



Ambitious Web Applications
EmberJS
• A Framework for Creating 



Ambitious Web Applications

• A Client Side MVC Framework
EmberJS
• A Framework for Creating 



Ambitious Web Applications

• A Client Side MVC Framework

• That’s opinionated in a good way
EmberJS
• A Framework for Creating 



Ambitious Web Applications

• A Client Side MVC Framework

• That’s opinionated in a good way

• So that your application is developed in a consistent
way which enables easier scalability
EmberJS
• A Framework for Creating 



Ambitious Web Applications

• A Client Side MVC Framework

• That’s opinionated in a good way

• So that your application is developed in a consistent
way which enables easier scalability

• Utilizes Handlebars.js for easy templating
Handlebar.JS
<div>

<label>Name:</label>

{{input type="text" value=name placeholder="Enter your
name"}}

</div>

<div class="text">

<h1>My name is {{name}} and I want to learn Ember!</h1>

</div>
Ember-Data
•A Data Persistence Library for Ember.js
Ember-Data
•A Data Persistence Library for Ember.js

•We’ve created a Mura ORM Adapter for Ember-Data
Ember-Data
•A Data Persistence Library for Ember.js

•We’ve created a Mura ORM Adapter for Ember-Data

•Sooo…
Ember-Data
component extends="mura.bean.beanORM" 

entityName="widget" table="widgets" {

property name="widgetid" fieldtype=“id";

property name="name" type=“string"

length="100"
required=true message="The name attribute is required an
must be.";

property name="options" singularname="option"
fieldtype="one-to-many" cfc="option" cascade="delete"; 

}
Ember-Data
App.Widget = DS.Model.extend({

primaryKey: 'widgetid',

widgetid: DS.attr(),

siteid: DS.attr(),

name: DS.attr(),

options: DS.hasMany('Option',{async:true})

});
Ember-Data
component extends="mura.bean.beanORM"
entityName="option" table="widgetoptions" {

property name="optionid" fieldtype="id";

property name="name" type="string" length="100"
required=true message="The name attribute is required
an must be.";

property name="widget" fieldtype="many-to-one"
cfc="widget" fkcolumn="widgetid";

}
Ember-Data
App.Option = DS.Model.extend({

primaryKey: 'optionid',

optionid: DS.attr(),

siteid: DS.attr(),

name: DS.attr(),

widgetid: DS.attr(),

widget: DS.belongsTo('Widget',{async:true})

});
Ember-Data
App.WidgetRoute = Ember.Route.extend({

model: function(params) {

return this.store.find(‘Widget’,params.widgetid);

}

});
Ember-Data
<script type="text/x-handlebars" id=“widget">

<h3>{{name}} ({{options.length}})</h3>

{{#if options.length}}

<ul>

{{#each option in options}}

	 	 <li>{{option.name}}</li>

{{/each}}

</ul>

{{/if}}

</script>
Ember.js
•We’re currently prototyping an Ember.js based front
for Mura
Ember.js
•We’re currently prototyping an Ember.js based front
for Mura

•It will allow Mura to run as a service
Ember.js
•We’re currently prototyping an Ember.js based front
for Mura

•It will allow Mura to run as a service

•This will allow Mura sites to be served locally on any
web server without needing a servlet container.
Ember.js
•We’re currently prototyping an Ember.js based front
for Mura

•It will allow Mura to run as a service

•This will allow Mura sites to be served locally on any
web server without needing a servlet container.

•We feel at this point it’s a perfect fit

More Related Content

PDF
High Performance Rails with MySQL
PDF
ITB2017 - Slaying the ORM dragons with cborm
PPTX
Modeling Tricks My Relational Database Never Taught Me
PPTX
Day 7 - Make it Fast
KEY
Authoring Stylesheets with Compass & Sass
PPTX
Day 2 - Intro to Rails
PDF
Java 8 and Beyond, a Scala Story
KEY
mod_rewrite bootcamp, Ohio LInux 2011
High Performance Rails with MySQL
ITB2017 - Slaying the ORM dragons with cborm
Modeling Tricks My Relational Database Never Taught Me
Day 7 - Make it Fast
Authoring Stylesheets with Compass & Sass
Day 2 - Intro to Rails
Java 8 and Beyond, a Scala Story
mod_rewrite bootcamp, Ohio LInux 2011

Similar to Mura ORM & Ember JS (20)

PDF
Super Fast Application development with Mura CMS
PDF
From Zero to CRUD with ORM - Led by Annette Liskey.pdf
PDF
ORM Pink Unicorns
PDF
Orm loveandhate
PDF
Killing Shark-Riding Dinosaurs with ORM
PDF
Modern Functional Fluent ColdFusion REST Apis
PPTX
Domain oriented development
PDF
Let ColdFusion ORM do the work for you!
PPT
Orm and hibernate
PPTX
How to use ORM
PDF
Data_Modeling_MongoDB.pdf
PDF
"ORMs – Entity Framework and NHibernate" - Bob Davidson, South Dakota Code Ca...
PDF
Luis Majano The Battlefield ORM
PPTX
Babysitting your orm essenmacher, adam
PDF
ORM in Django
PDF
Development without Constraint
PDF
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
PPT
ADO.NET Entity Framework
PDF
N Hibernate Explained By Example
PPTX
Immutable Data and TypeScript in an Ember.js Application
Super Fast Application development with Mura CMS
From Zero to CRUD with ORM - Led by Annette Liskey.pdf
ORM Pink Unicorns
Orm loveandhate
Killing Shark-Riding Dinosaurs with ORM
Modern Functional Fluent ColdFusion REST Apis
Domain oriented development
Let ColdFusion ORM do the work for you!
Orm and hibernate
How to use ORM
Data_Modeling_MongoDB.pdf
"ORMs – Entity Framework and NHibernate" - Bob Davidson, South Dakota Code Ca...
Luis Majano The Battlefield ORM
Babysitting your orm essenmacher, adam
ORM in Django
Development without Constraint
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
ADO.NET Entity Framework
N Hibernate Explained By Example
Immutable Data and TypeScript in an Ember.js Application
Ad

More from Mura CMS (10)

PDF
Mura CMS 6.1 Overview
PDF
Community its easier than you think
PDF
Interacting with the Mura CMS Core
PDF
Faceted Search In Mura CMS Using Elasticsearch
PDF
Mura CMS Publishing Workflow
PDF
How To Plan A Successful Multi-Site Deployment In Mura CMS
PDF
Mura CMS & Moodle LMS
PDF
Effective Intranet Planning
PDF
Railo 4.0 - MuraCon Presentations
PPT
Integrating Google Search Appliance with Mura CMS
Mura CMS 6.1 Overview
Community its easier than you think
Interacting with the Mura CMS Core
Faceted Search In Mura CMS Using Elasticsearch
Mura CMS Publishing Workflow
How To Plan A Successful Multi-Site Deployment In Mura CMS
Mura CMS & Moodle LMS
Effective Intranet Planning
Railo 4.0 - MuraCon Presentations
Integrating Google Search Appliance with Mura CMS
Ad

Recently uploaded (20)

PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
1 - Historical Antecedents, Social Consideration.pdf
PDF
Heart disease approach using modified random forest and particle swarm optimi...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
A Presentation on Artificial Intelligence
PDF
Mushroom cultivation and it's methods.pdf
PDF
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
PPTX
TLE Review Electricity (Electricity).pptx
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PDF
Hybrid model detection and classification of lung cancer
PDF
August Patch Tuesday
PPTX
A Presentation on Touch Screen Technology
PDF
DP Operators-handbook-extract for the Mautical Institute
PDF
WOOl fibre morphology and structure.pdf for textiles
PPTX
1. Introduction to Computer Programming.pptx
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Web App vs Mobile App What Should You Build First.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Programs and apps: productivity, graphics, security and other tools
Accuracy of neural networks in brain wave diagnosis of schizophrenia
Unlocking AI with Model Context Protocol (MCP)
1 - Historical Antecedents, Social Consideration.pdf
Heart disease approach using modified random forest and particle swarm optimi...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
A Presentation on Artificial Intelligence
Mushroom cultivation and it's methods.pdf
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
TLE Review Electricity (Electricity).pptx
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
Hybrid model detection and classification of lung cancer
August Patch Tuesday
A Presentation on Touch Screen Technology
DP Operators-handbook-extract for the Mautical Institute
WOOl fibre morphology and structure.pdf for textiles
1. Introduction to Computer Programming.pptx
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Web App vs Mobile App What Should You Build First.pdf

Mura ORM & Ember JS

  • 1. Mura ORM and EmberJS • By Matt Levine

  • 3. Who Am I? • CTO of Blue River Interactive Group
  • 4. Who Am I? • CTO of Blue River Interactive Group • Started Mura CMS with Sean Schoeder a long time ago...
  • 6. What We’re Talking About • Mura ORM
  • 7. What We’re Talking About • Mura ORM • EmberJS
  • 8. What We’re Talking About • Mura ORM • EmberJS • But Mostly Mura ORM
  • 10. Why Mura ORM? • It all started with creating the Mura approval chains.
  • 11. Why Mura ORM? • It all started with creating the new Mura approval chains. • Needed to create 5 new entities and didn’t want to write a custom DAO for each one.
  • 12. Started with 3 Options
  • 13. Started with 3 Options • Custom DAOs
  • 14. Custom DAOs • Too much work
  • 15. Custom DAOs • Too much work • No code re-use
  • 16. Started with 3 Options • Custom DAOs • Mura Class Extension Module
  • 17. Mura Class Extension Module GREAT FOR: • Targeting nodes for custom business logic
  • 18. Mura Class Extension Module GREAT FOR: • Targeting nodes for custom business logic • Rendering events
  • 19. Mura Class Extension Module GREAT FOR: • Targeting nodes for custom business logic • Rendering events • Data events
  • 20. Mura Class Extension Module GREAT FOR: • Targeting nodes for custom business logic • Rendering events • Data events • Adding custom values to be used within rendering and data events
  • 21. Mura Class Extension Module NOT AS GOOD FOR: • Maintaining relationships between entities
  • 22. Mura Class Extension Module NOT AS GOOD FOR: • Maintaining relationships between entities • Really custom business logic
  • 23. Mura Class Extension Module NOT AS GOOD FOR: • Maintaining relationships between entities • Really custom business logic • Directly querying the database
  • 24. Mura Class Extension Module RECAP: • Only handles very simple entities
  • 25. Mura Class Extension Module RECAP: • Only handles very simple entities • Great for hooking attributes to existing Mura entities, but bad for complicated logic.
  • 26. Mura Class Extension Module RECAP: • Only handles very simple entities • Great for hooking attributes to existing Mura entities, but bad for complicated logic. • Want the data to be stored in flat tables.
  • 27. Mura Class Extension Module RECAP: • Only handles very simple entities • Great for hooking attributes to existing Mura entities, but bad for complicated logic. • Want the data to be stored in flat tables. • Not the appropriate choice
  • 28. Started with 3 Options • Custom DAOs • Mura Class Extension Module • CF based Hibernate ORM
  • 29. CF Hibernate ORM GREAT FOR: •Easily defining entity properties
  • 30. CF Hibernate ORM GREAT FOR: •Easily defining entity properties •CRUD operations
  • 31. CF Hibernate ORM GREAT FOR: •Easily defining entity properties •CRUD operations •Managing relationships to other CF ORM entities
  • 32. CF Hibernate ORM GREAT FOR: •Easily defining entity properties •CRUD operations •Managing relationships to other CF ORM entities •You just describe the entity with properties and start using it!
  • 33. CF Hibernate ORM NOT SO GOOD FOR: •Creating relationships to Mura core entites
  • 34. CF Hibernate ORM NOT SO GOOD FOR: •Creating relationships to Mura core entites •Working with DI1
  • 35. CF Hibernate ORM NOT SO GOOD FOR: •Creating relationships to Mura core entites •Working with DI1 •Don’t want to deal with sharing hibernate sessions with other application and plugins
  • 36. CF Hibernate ORM NOT SO GOOD FOR: •Creating relationships to Mura core entites •Working with DI1 •Don’t want to deal with sharing hibernate sessions with other application and plugins •It just works, but when it doesn't... Good Luck
  • 38. CF Hibernate ORM RECAP: •Love the concept! •Seems like CF ORM would be a walled garden.
  • 39. CF Hibernate ORM RECAP: •Love the concept! •Seems like CF ORM would be a walled garden. •Sharing a ORM session with other sub applications sounds like a nightmare
  • 40. CF Hibernate ORM RECAP: •Love the concept! •Seems like CF ORM would be a walled garden. •Sharing a ORM session with other sub applications sounds like a nightmare •I would like the relationships to be based on DI1 BeanName or Alias rather than component path.
  • 41. CF Hibernate ORM RECAP: •When things go wrong it really feels like a black box. You get low level java error that don't neccesarilly easily map to what you did wrong in your CFML •CF ORM really seems to want you to forget about sql and just go through it's black box. I like sql. I think is it's pretty darn cool
  • 43. What if? • I roll my own that works exactly how Mura works!
  • 44. I Could Make Them Accesible via $.getBean(entityName); 
and application.serviceFactory(entityName); Takes advantage of DI1 dependency injection
  • 45. Have the Same Interactions • entity.loadBy() • entity.get{relateEntity}Iterator(); • entity.get{relateEntity}Query(); • entity.get{relateEntity}(); • entity.getFeed(); • entity.validate(); • entity.getError();
  • 46. Have the Same Interactions • entityFeed.addParam(); • entityFeed.getQuery(); • entityFeed.getIterator();
  • 47. Have the Same Interactions feed=$.getBean(entityName).getFeed(); feed.addParam(column=’mycolumn’,criteria=‘test’); iterator=feed.getIterator(); ! <cfloop condition=”iterator.hasNext()”> <cfoutput>#iterator.next().getMyColumn()#</cfoutput> </cfloop>
  • 48. Be Targetable By Mura Events component extends=”mura.cfobject”{ onBeforeMyEntitySave($){ var bean=$.event(‘bean’); .... } }
  • 49. They Could Also • Know how to bundle themselves • Play well with Mura content versioning • Have a more simple implementation than CF ORM
  • 50. It could use the same component attributes • entityName • table • datasource • discriminatorColumn • discriminatorValue
 • orderby • readonly
  • 51. With some new ones • bundleable • cacheName • dbtype • manageSchema • useTrash
  • 52. It could use the same property attributes • name • persistent • fieldtype • cfc • fkcolumn
 • type • cascade • singularName • orderby • length • default • ormType ! !
  • 53. With some new ones • dataType • nullable • required • validate • message
 • regex • comparable
  • 54. And a bunch attributes for validation • minValue • maxValue • minLength • maxLength • minCollection
 • maxCollection • minList • maxList • inList • method • lte • lt • gte • gt • eq • neq
  • 55. It could also support CF ORM • preLoad(); • postLoad(); • preUpdate(); • postUpdate(); • preCreate(); • postCreate(); • postInsert(); • preDelete(); • postDelete();
  • 57. So that’s what we did • Now let’s actually see some code
  • 59. EmberJS • A Framework for Creating 



Ambitious Web Applications
  • 60. EmberJS • A Framework for Creating 



Ambitious Web Applications • A Client Side MVC Framework
  • 61. EmberJS • A Framework for Creating 



Ambitious Web Applications • A Client Side MVC Framework • That’s opinionated in a good way
  • 62. EmberJS • A Framework for Creating 



Ambitious Web Applications • A Client Side MVC Framework • That’s opinionated in a good way • So that your application is developed in a consistent way which enables easier scalability
  • 63. EmberJS • A Framework for Creating 



Ambitious Web Applications • A Client Side MVC Framework • That’s opinionated in a good way • So that your application is developed in a consistent way which enables easier scalability • Utilizes Handlebars.js for easy templating
  • 64. Handlebar.JS <div> <label>Name:</label> {{input type="text" value=name placeholder="Enter your name"}} </div> <div class="text"> <h1>My name is {{name}} and I want to learn Ember!</h1> </div>
  • 65. Ember-Data •A Data Persistence Library for Ember.js
  • 66. Ember-Data •A Data Persistence Library for Ember.js •We’ve created a Mura ORM Adapter for Ember-Data
  • 67. Ember-Data •A Data Persistence Library for Ember.js •We’ve created a Mura ORM Adapter for Ember-Data •Sooo…
  • 68. Ember-Data component extends="mura.bean.beanORM" 
 entityName="widget" table="widgets" { property name="widgetid" fieldtype=“id"; property name="name" type=“string"

length="100" required=true message="The name attribute is required an must be.";
 property name="options" singularname="option" fieldtype="one-to-many" cfc="option" cascade="delete"; }
  • 69. Ember-Data App.Widget = DS.Model.extend({ primaryKey: 'widgetid', widgetid: DS.attr(), siteid: DS.attr(), name: DS.attr(), options: DS.hasMany('Option',{async:true}) });
  • 70. Ember-Data component extends="mura.bean.beanORM" entityName="option" table="widgetoptions" { property name="optionid" fieldtype="id"; property name="name" type="string" length="100" required=true message="The name attribute is required an must be."; property name="widget" fieldtype="many-to-one" cfc="widget" fkcolumn="widgetid"; }
  • 71. Ember-Data App.Option = DS.Model.extend({ primaryKey: 'optionid', optionid: DS.attr(), siteid: DS.attr(), name: DS.attr(), widgetid: DS.attr(), widget: DS.belongsTo('Widget',{async:true}) });
  • 72. Ember-Data App.WidgetRoute = Ember.Route.extend({ model: function(params) { return this.store.find(‘Widget’,params.widgetid); } });
  • 73. Ember-Data <script type="text/x-handlebars" id=“widget"> <h3>{{name}} ({{options.length}})</h3> {{#if options.length}} <ul> {{#each option in options}} <li>{{option.name}}</li> {{/each}} </ul> {{/if}} </script>
  • 74. Ember.js •We’re currently prototyping an Ember.js based front for Mura
  • 75. Ember.js •We’re currently prototyping an Ember.js based front for Mura •It will allow Mura to run as a service
  • 76. Ember.js •We’re currently prototyping an Ember.js based front for Mura •It will allow Mura to run as a service •This will allow Mura sites to be served locally on any web server without needing a servlet container.
  • 77. Ember.js •We’re currently prototyping an Ember.js based front for Mura •It will allow Mura to run as a service •This will allow Mura sites to be served locally on any web server without needing a servlet container. •We feel at this point it’s a perfect fit