Skip to content

Commit 6f7e1f2

Browse files
authored
Merge pull request #20 from MehulKChaudhari/add/model-schemaRecord-comparison
Add model definition comparing EmberData models with SchemaRecord
2 parents e5a6ff2 + 4e84032 commit 6f7e1f2

File tree

5 files changed

+107
-0
lines changed

5 files changed

+107
-0
lines changed

app/routes/application.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,16 @@ export default class ApplicationRoute extends Route {
8686
},
8787
],
8888
},
89+
{
90+
id: 'models',
91+
subsections: [
92+
{
93+
id: 'model-definition',
94+
classicFiles: ['old.js'],
95+
octaneFiles: ['new.js'],
96+
},
97+
],
98+
},
8999
];
90100
}
91101
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import { withDefaults } from '@warp-drive/schema-record';
2+
3+
// Register schemas for all resources at once
4+
store.schema.registerResources([
5+
// User schema
6+
withDefaults({
7+
type: 'user',
8+
fields: [
9+
{ kind: 'field', name: 'firstName' },
10+
{ kind: 'field', name: 'lastName' },
11+
{
12+
kind: 'derived',
13+
name: 'name',
14+
type: 'concat',
15+
options: { fields: ['firstName', 'lastName'], separator: ' ' }
16+
},
17+
{
18+
kind: 'hasMany',
19+
name: 'pets',
20+
type: 'pet',
21+
options: {
22+
async: false,
23+
inverse: 'owner',
24+
polymorphic: true,
25+
linksMode: true,
26+
resetOnRemoteUpdate: false,
27+
}
28+
}
29+
]
30+
}),
31+
32+
// Pet schema
33+
withDefaults({
34+
type: 'pet',
35+
fields: [
36+
{ kind: 'field', name: 'name' },
37+
{
38+
kind: 'belongsTo',
39+
name: 'owner',
40+
type: 'user',
41+
options: {
42+
async: false,
43+
inverse: 'pets',
44+
linksMode: true,
45+
resetOnRemoteUpdate: false,
46+
}
47+
}
48+
]
49+
}),
50+
51+
// Dog schema (extends pet)
52+
withDefaults({
53+
type: 'dog',
54+
fields: [
55+
{ kind: 'field', name: 'breed' },
56+
{
57+
kind: 'belongsTo',
58+
name: 'owner',
59+
type: 'user',
60+
options: {
61+
async: false,
62+
inverse: 'pets',
63+
as: 'pet',
64+
linksMode: true,
65+
resetOnRemoteUpdate: false,
66+
}
67+
}
68+
]
69+
})
70+
]);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Traditional EmberData Model Definition
2+
import Model, { attr, hasMany, belongsTo } from '@ember-data/model';
3+
4+
export default class UserModel extends Model {
5+
@attr('string') firstName;
6+
@attr('string') lastName;
7+
@hasMany('pet', { polymorphic: true, inverse: 'owner' }) pets;
8+
9+
get name() {
10+
return `${this.firstName} ${this.lastName}`;
11+
}
12+
}
13+
14+
// Related models would be defined in separate files:
15+
16+
// export default class PetModel extends Model {
17+
// @attr('string') name;
18+
// @belongsTo('user', { inverse: 'pets' }) owner;
19+
// }
20+
21+
// export default class DogModel extends PetModel {
22+
// @attr('string') breed;
23+
// }

translations/models/en-us.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
title: Models
2+
description: See how traditional EmberData models compare to the new SchemaRecord approach.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
title: Model Definition
2+
description: See how to define resources using the traditional EmberData models and the new SchemaRecord approach.

0 commit comments

Comments
 (0)