The Gallery is deprecated. No new Gallery components may be submitted, and modifying existing components is disabled. For more information please read the Gallery Deprecation blog post. This is a static snapshot of the Gallery for archive purposes.
YUI({
//Last Gallery Build of this module
gallery: 'gallery-2012.04.18-20-14'
}).use('gallery-model-relate', function(Y) {
var CompanyModel, EmployeeModel;
// example company model that has a toMany relationship 'employees' to EmployeeModel
CompanyModel = Y.Base.create('companyModel', Y.Model, [Y.ModelRelate], {}, {
ATTRS: {
name: {}
},
RELATIONSHIPS: {
employees: {
type: 'toMany',
key: 'id',
relatedModel: 'EmployeeModel',
relatedKey: 'companyId'
}
}
});
// example employee model that has a toOne relationship 'company' to CompanyModel
EmployeeModel = Y.Base.create('employeeModel', Y.Model, [Y.ModelRelate], {}, {
ATTRS: {
name: {},
companyId: {}
},
RELATIONSHIPS: {
company: {
type: 'toOne',
key: 'companyId',
relatedModel: 'CompanyModel',
relatedKey: 'id'
}
}
});
// creating an instance of a model extended with ModelRelate
// automatically registers it with the ModelStore
var foo = new CompanyModel({id: 1, name: 'Foo Inc.'});
var joe = new EmployeeModel({id: 1, name: 'Joe Foo', companyId: 1});
// use the getRelated method to return models matching the
// 'employees' relationship defined on CompanyModel. In
// this case, a ModelList instance since 'employees' is defined
// as a 'toMany' relationship
var fooEmployees = foo.getRelated('employees');
// fooEmployees is a modelList containing the joe model
var larry = new EmployeeModel({id: 2, name: 'Larry Bar', companyId: 1});
// fooEmployees now contains 2 employee models, joe and larry
var joeCompany = joe.getRelated('company');
// joeCompany is the Foo Inc. company model
// aww, larry switched jobs
larry.set('companyId', 2);
// since we updated the companyId on the larry model, it no longer matches the companyId
// on the fooEmployees relationship. larry has been removed from the fooEmployees
// relationship which now contains only the joe model. larry still exists, just not as
// part of the fooEmployees relationship
// note: Relationships are not actually created until the first call to 'getRelated'
// so defining a relationship and adding a bunch of related models prior to
// the first call to 'getRelated' does not incur any overhead
// Now, lets say larry starts his own business
var larryCo = new CompanyModel({name: 'LarryCo Ltd.'});
larry.set('companyId', larryCo.get('id'));
// model-relate changes the definition of a 'new' model. Instead of setting id=null
// new models have id=clientId so we always have a valid id for the relationship
// now when we save larryCo to our database
larryCo.save();
// the relationship knows to update all the related models to the new id
larryCo.get('id'); // == 5768 as assigned by the database
larry.get('companyId'); // == 5678
larryCo.getRelated('employees'); // modelList containing the larry model
larry.getRelated('company'); // the larryCo model
// if a related key changes not as the result of a new model being created, the relationship
// is broken and will be refreshed with models in the store matching the new key
});
/home/y/libexec/ant/bin/ant all Buildfile: build.xml [echo] Starting Build For gallery-model-relate clean: init: [mkdir] Created dir: /home/y/var/builds/workspace/gallery/build_tmp/src/yui3-gallery/src/gallery-model-relate/build_tmp [echo] Starting Build For gallery-model-relate -lint-server: [echo] Starting Build For gallery-model-relate -node: [echo] For faster builds, install Node.js. -concatdebug: [copy] Copying 4 files to /home/y/var/builds/workspace/gallery/build_tmp/src/yui3-gallery/src/gallery-model-relate/build_tmp/ant [delete] Deleting directory /home/y/var/builds/workspace/gallery/build_tmp/src/yui3-gallery/src/gallery-model-relate/build_tmp/ant -registerdebug: [copy] Copying 1 file to /home/y/var/builds/workspace/gallery/build_tmp/src/yui3-gallery/src/gallery-model-relate/build_tmp -prependdebug: -appenddebug: builddebug: -createcore: [copy] Copying 1 file to /home/y/var/builds/workspace/gallery/build_tmp/src/yui3-gallery/src/gallery-model-relate/build_tmp -loggerregex: buildcore: -rollupjs: -concatskins: -buildskins: -rollupcss: buildskins: -buildlangs: -rolluplangs: buildlangs: build: minify: [yuicompressor] Compressing /home/y/var/builds/workspace/gallery/build_tmp/src/yui3-gallery/src/gallery-model-relate/build_tmp/gallery-model-relate.js [yuicompressor] [yuicompressor] [WARNING] Try to use a single 'var' statement per scope. [yuicompressor] .preventDefault();}}}; ---> var <--- ToOneRelationship={type:"toOne",_initRelated:function [yuicompressor] [yuicompressor] [WARNING] Try to use a single 'var' statement per scope. [yuicompressor] (e);}}}}; ---> var <--- store=Y.ModelStore;functionModelRelationshp(config [yuicompressor] [yuicompressor] [WARNING] Try to use a single 'var' statement per scope. [yuicompressor] augment(ModelRelationshp,Y.EventTarget); ---> var <--- RELS="relationships",REL_PREFIX="_rel_";functionModelRelate [yuicompressor] Compressed to /home/y/var/builds/workspace/gallery/build_tmp/src/yui3-gallery/src/gallery-model-relate/build_tmp/gallery-model-relate-min.js lint: [echo] Using Rhino. Install nodejs to improve jslint speed, or skip with -Dlint.skip=true [java] Running JSLint on : /home/y/var/builds/workspace/gallery/build_tmp/src/yui3-gallery/src/gallery-model-relate/build_tmp/gallery-model-relate.js [java] [java] [java] 239, 62: Expected an assignment or function call and instead saw an expression. [java] this.related && this.related.set(name, value, options); [java] [java] 1096, 59: Expected an assignment or function call and instead saw an expression. [java] callback && callback.apply(null, arguments); [java] [java] [java] local: deploybuild: [copy] Copying 3 files to /home/y/var/builds/workspace/gallery/build_tmp/src/yui3-gallery/build/gallery-model-relate deployassets: deployskins: deploylang: deploydocs: deploy: all: BUILD SUCCESSFUL Total time: 3 seconds
All code on this site is licensed under the BSD License unless stated otherwise.