X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/3789b528d8dd8aad4558e38e22d775bcab1cbd36..6746dc89c47ed01b165cc1152533605f97eb8e8d:/docs/guides/data/examples/associations_validations/app.js diff --git a/docs/guides/data/examples/associations_validations/app.js b/docs/guides/data/examples/associations_validations/app.js new file mode 100644 index 00000000..5b33aa84 --- /dev/null +++ b/docs/guides/data/examples/associations_validations/app.js @@ -0,0 +1,118 @@ +/** + * @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 + +}); +