Example: Enforcing DataTypes

DataSchema supports a parser property that enforces type conversion on data as the schema is being applied. The parser property can point to one of the following types of parsing functions:

  • A DataType subclass parse function, like Y.DataType.Number.parse
  • A registered shortcut to a DataType subclass parse function, like "number"
  • A custom function

Basic example

Data
{
    "results":[
        {"string":"aardvark", "number":"1", "date":"Jan 1, 2001"},
        {"string":"bat", "number":"2", "date":"Feb 2, 2002"},
        {"string":"camel", "number":"3", "date":"March 3, 2003"}
    ]
}
    
Schema
{
    resultListLocator: "results",
    resultFields: [
        "string", // needs no parsing
        {key:"number", parser: "number"}, // point to built-in shortcut
        {key:"date", parser: Y.DataType.Date.parse}] // point to function
}
    
Normalized data

Use the parser property in your schema's resultFields definition to point to a parsing function. Parsing your data in this manner is essential if your numerical or date data comes over the wire as JSON, since all the values will be strings.

YUI().use("datatype", "dataschema", function(Y) {
    var data_in = {
            "results":[
                {"string":"aardvark", "number":"1", "date":"Jan 1, 2001"},
                {"string":"bat", "number":"2", "date":"Feb 2, 2002"},
                {"string":"camel", "number":"3", "date":"March 3, 2003"}
            ]
        },
        schema = {
            resultListLocator: "results",
            resultFields: [
                // needs no parsing
                "string",
                // point parser to built-in function shortcut
                {key:"number", parser: "number"},
                // point parser to built-in function
                {key:"date", parser: Y.DataType.Date.parse}]
        },
        data_out = Y.DataSchema.JSON.apply(schema, data_in).results;
});