--- /dev/null
+/**
+ * @example Associations and Validations
+ *
+ * This example demonstrates associations and validations on a {@link Ext.data.Model}.
+ * See console for output.
+ */
+
+// define the User model
+Ext.define('User', {
+ extend: 'Ext.data.Model',
+ fields: ['id', 'name', 'age', 'gender'],
+ validations: [
+ {type: 'presence', name: 'name'},
+ {type: 'length', name: 'name', min: 5},
+ {type: 'format', name: 'age', matcher: /\d+/},
+ {type: 'inclusion', name: 'gender', list: ['male', 'female']},
+ {type: 'exclusion', name: 'name', list: ['admin']}
+ ],
+
+ proxy: {
+ type: 'rest',
+ url : 'data/users',
+ reader: {
+ type: 'json',
+ root: 'users'
+ }
+ },
+
+ hasMany: 'Post' // shorthand for {model: 'Post', name: 'posts'}
+});
+
+//define the Post model
+Ext.define('Post', {
+ extend: 'Ext.data.Model',
+ fields: ['id', 'user_id', 'title', 'body'],
+
+ proxy: {
+ type: 'rest',
+ url : 'data/posts',
+ reader: {
+ type: 'json',
+ root: 'posts'
+ }
+ },
+ belongsTo: 'User',
+ hasMany: {model: 'Comment', name: 'comments'}
+});
+
+//define the Comment model
+Ext.define('Comment', {
+ extend: 'Ext.data.Model',
+ fields: ['id', 'post_id', 'name', 'message'],
+
+ belongsTo: 'Post'
+});
+
+Ext.require('Ext.data.Store');
+Ext.onReady(function() {
+ // Loads User with ID 1 and related posts and comments using User's Proxy
+ User.load(1, {
+ success: function(user) {
+ console.log("User: " + user.get('name'));
+
+ // loop through the user's posts and print out the comments
+ user.posts().each(function(post) {
+ console.log("Comments for post: " + post.get('title'));
+
+ post.comments().each(function(comment) {
+ console.log(comment.get('message'));
+ });
+
+ // get the user reference from the post's belongsTo association
+ post.getUser(function(user) {
+ console.log('Just got the user reference from the post: ' + user.get('name'))
+ });
+
+ // try to change the post's user
+ post.setUser(100, {
+ callback: function(product, operation) {
+ if (operation.wasSuccessful()) {
+ console.log('Post\'s user was updated');
+ } else {
+ console.log('Post\'s user could not be updated');
+ }
+ }
+ });
+
+ });
+
+ // create a new post
+ user.posts().add({
+ title: 'Ext JS 4.0 MVC Architecture',
+ body: 'It\'s a great Idea to structure your Ext JS Applications using the built in MVC Architecture...'
+ });
+
+ // save the new post
+ user.posts().sync();
+
+ }
+ });
+
+ // now lets try to create a new user with as many validation errors as we can
+ var newUser = Ext.create('User', {
+ name: 'admin',
+ age: 'twenty-nine',
+ gender: 'not a valid gender'
+ });
+
+ // run some validation on the new user we just created
+ var errors = newUser.validate();
+
+ console.log('Is User valid?', errors.isValid()); //returns 'false' as there were validation errors
+ console.log('All Errors:', errors.items); //returns the array of all errors found on this model instance
+
+ console.log('Age Errors:', errors.getByField('age')); //returns the errors for the age field
+
+});
+