Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Div
classapi-page

fluid.model.transformWithRules(model, rules)

Section
Column
width70%

Transforms a model based on a specified expansion rules objects.

Code Block
javascript
bgColorwhite
borderStylenone
javascript
fluid.model.transformWithRules(model, rules);

File name: ModelTransformations.js

Parameters

Span
classborderless-table

model

(Object) the model to transform

rules

(Object) a rules object containing instructions on how to transform the model (see below for more information)

options

(Object) a set of rules governing the transformations. At present this may contain the values:
isomorphic: true indicating that the output model is to be governed by the same schema found in the input model, or
flatSchema holding a flat schema object which consists of a hash of EL path specifications with wildcards, to the values "array"/"object" defining the schema to be used to construct missing trunk values.

Return Value

Span
classborderless-table

Object

the transformed model

Column
width5%
 
Column

See Also


Rules

Rules objects take the form of:

Code Block
javascript
javascript
{
    "target.path": "value.el.path" 
}

or

Code Block
javascript
javascript
{
    "target.path": {
        transform: {
            type: "transform.function.path",
             ...
        }
    }
}

Transformation Expanders

The Framework currently provides the following expanders that can be used as part of a model transformation.

  • fluid.model.transformtransforms.value
  • fluid.model.transformtransforms.arrayValue
  • fluid.model.transformtransforms.firstValue
  • fluid.model.transformtransforms.merge

Each of these is described below.

fluid.

model.transform

transforms.value

This extracts and/or the value of a given path, and can be used for the following purposes:

To rename a property:

Section
Column

Start:

Code Block
javascript
javascript
var source = {
    cat: "meow",
    ...
}
Column



>>

Column

Rule to rename "cat" to "feline":

Code Block
javascript
javascript
var rules = {
    feline: { 
        transform: {
            type: "fluid.modeltransforms.transform.value",
            // specify only the path to transform
            inputPath: "cat"
        }
    },
    ....
}
Column



>>

Column

Result:

Code Block
javascript
javascript
{
    feline: "meow",
    ...
}

To set a default value:

Section
Column

Start:

Code Block
javascript
javascript
var source = {
    gerbil: undefined,
    // or if "gerbil" doesn't exist
    ...
}
Column



>>

Column

Rule to set default value of "gerbil":

Code Block
javascript
javascript
var rules = {
    gerbil: { 
        transform: {
            type: "fluid.modeltransforms.transform.value",
            // specify path and default value
            inputPath "gerbil",
            value: "squeek"
        }
    },
    ....
}
Column



>>

Column

Result:

Code Block
javascript
javascript
{
    gerbil: "squeek",
    ...
}

Note that if "gerbil" has a value initially, it will be unaffected.

To specify a literal value:

Section
Column

Start:

Code Block
javascript
javascript
var source = {
    // no mention of kangaroos
    ...
}
Column



>>

Column

Rule to set a value for "kangaroo":

Code Block
javascript
javascript
var rules = {
    kangaroo: { 
        transform: {
            type: "fluid.model.transformtransforms.value",
            // specify only a value
            value: "boingg"
        }
    },
    ....
}
Column



>>

Column

Result:

Code Block
javascript
javascript
{
    kangaroo: "boingg",
    ...
}

To change the structure/nesting:

Section
Column

Start:

Code Block
javascript
javascript
var source = {
    goat: false,
    sheep: [
        "baaa",
        "wooooool"
    ],
    ...
}
Column



>>

Column

Rule to change the nesting:

Code Block
javascript
javascript
var rules = {
    "farm.goat": {                                          
        transform: {
            type: "fluid.model.transformtransforms.value",
            inputPath "goat"
        }
    },
    "farm.sheep": {
        transform: {
            type: "fluid.modeltransforms.transform.value",
            inputPath "sheep"
        }
    } 
    ....
}
Column



>>

Column

Result:

Code Block
javascript
javascript
{
    farm: {
        goat: false,
        sheep: [
            "baaa",
            "wooooool"
        ]
    },
    ...
}

fluid.

model

transforms.

transform.

arrayValue

The arrayValue expander will transform a value into an aray. If the value is already an array, the expander will have no effect.

For example:

Section
Column

Start:

Code Block
javascript
javascript
var source = {
    cat: "meow",
    sheep: [
        "baaa",
        "wooooool"
    ],
    ...
}
Column



>>

Column

Rule to convert to arrays:

Code Block
javascript
javascript
var rules = {
    cat: {                                          
        transform: {
            type: "fluid.model.transformtransforms.arrayValue",
            inputPath "cat"
        }
    },
    sheep: {
        transform: {
            type: "fluid.model.transformtransforms.arrayValue",
            inputPath "sheep"
        }
    } 
    ....
}
Column



>>

Column

Result:

Code Block
javascript
javascript
{
    cat: ["meow"],
    sheep: [
        "baaa",
        "wooooool"
    ],
    ...
}

Note that the value of cat is now an array, but the value of sheep is unaffected.

fluid.

model.transform

transforms.firstValue

fluid.

model.transform

transforms.merge

Example

Code Block
javascript
javascript
 

In this example, description here...