Shared Models 2 (with namespace)
The latest build of Ember.
by Jeremy Gillick
HTML
<script src="http://builds.emberjs.com/handlebars-1.0.0.js"></script>
<script src="http://builds.emberjs.com/ember-latest.js"></script>
<script src="http://builds.emberjs.com/tags/v1.0.0-beta.4/ember-data.prod.js"></script>
<script type="text/x-handlebars" data-template-name="index-app2">
<h2>Products</h2>
<ul>
{{#each products}}
<li>{{name}} - ${{price}}</li>
{{/each}}
</ul>
</script>
<div id="app1"></div>
<div id="app2"></div>
JavaScript
App1 = Ember.Application.create({
rootElement: "#app1"
});
App2 = Ember.Application.create({
rootElement: "#app2"
});
NestShared = Ember.Namespace.create({
importInto: function(app, component){
var importList = NestShared;
for (element in importList) if (importList.hasOwnProperty(element)) {
var obj = importList[element],
importElem = false;
switch(component) {
case 'model':
importElem = (obj.superclass == DS.Model);
break;
}
if (importElem) {
app.set(element, importList[element]);
console.log('Importing ', element);
console.log(app);
}
}
}
});
//
// Define models
//
NestShared.Product = DS.Model.extend({
name: DS.attr('string'),
price: DS.attr('number')
});
NestShared.importInto(App1, 'model');
NestShared.importInto(App2, 'model');
//
// Main Program for App2
//
App2.IndexController = Em.ObjectController.extend({
products: []
});
App2.IndexView = Em.View.extend({
templateName: 'index-app2'
});
App2.IndexRoute = Ember.Route.extend({
setupController: function(controller, products) {
controller.set('products', [
this.store.createRecord('product', {name: 'Robot', price: 10.55}),
this.store.createRecord('product', {name: 'Blocks', price: 4.99})
]);
}
});