72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly<style scoped>
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly/* custom styles for this example */
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly#demo .output {margin-bottom:1em; padding:10px; border:1px solid #D9D9D9;}
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly</style>
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly<div class="intro">
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly <p>DataSource.Function allows the implementer to define a JavaScript function that returns data values, for maximum customizeability. A <a href="../dataschema/">DataSchema</a> plugin is used to normalize incoming data into a known format for consistency of usage by other components.</p>
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly</div>
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly
819e90d415ed17d59af3a247b2ad9d6feb0c21b5Luke Smith<div class="example yui3-skin-sam">
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly {{>datasource-function-source}}
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly</div>
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly<p>Your custom function can return arbitrary data, so use the appropriate schema plugin to normalize the data into a consistent format. Array data would use a DataSourceArraySchema plugin:</p>
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly```
72378c4b11f0468874fbad14749246d2ae564474Jenny DonnellyYUI().use("datasource-function", "datasource-arrayschema", function(Y) {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly var myFunction = function(request) {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly return [
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly {name:"abc",id:123},
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly {name:"def",id:456},
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly {name:"ghi",id:789}
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly ];
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly },
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly myDataSource = new Y.DataSource.Function({source:myFunction}),
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly myCallback = {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly success: function(e){
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly alert(e.response);
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly },
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly failure: function(e){
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly alert("Could not retrieve data: " + e.error.message);
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly }
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly };
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly myDataSource.plug(Y.Plugin.DataSourceArraySchema, {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly schema: {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly resultFields: ["name","id"]
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly }
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly });
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly myDataSource.sendRequest({callback:myCallback});
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly});
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly```
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly<p>Whereas JSON data would use a DataSourceJSONSchema plugin:</p>
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly```
72378c4b11f0468874fbad14749246d2ae564474Jenny DonnellyYUI().use("datasource-function", "datasource-jsonschema", function(Y) {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly var myFunction = function(request) {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly return {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly "profile":{
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly "current":160,
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly "target":150
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly },
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly "reference": [
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly ...
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly },
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly "category":"nutrition",
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly "type":"intake",
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly "fruit":[
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly {"name":"apple", "calories":70},
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly {"name":"banana", "calories":70},
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly {"name":"orange", "calories":90},
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly ],
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly "vegetables":[
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly {"name":"baked potato", "calories":150},
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly {"name":"broccoli", "calories":50},
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly {"name":"green beans", "calories":30}
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly ]
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly }
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly ],
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly "program": [
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly ...
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly ]
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly };
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly },
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly myDataSource = new Y.DataSource.Function({source:myFunction}),
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly myCallback = {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly success: function(e){
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly alert(e.response);
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly },
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly failure: function(e){
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly alert("Could not retrieve data: " + e.error.message);
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly }
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly };
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly myDataSource.plug(Y.Plugin.DataSourceJSONSchema, {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly schema: {
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly resultListLocator: "reference[1].fruit",
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly resultFields: ["name","calories"]
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly }
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly });
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly myDataSource.sendRequest({callback:myCallback});
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly});
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly```
72378c4b11f0468874fbad14749246d2ae564474Jenny Donnelly